MySQL存储过程中declare和set定义变量的区别

  在存储过程中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量。

 

  1、declare定义的变量类似java类中的局部变量,仅在方法中生效。即只在存储过程中的begin和end之间生效。

  2、@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据。如何理解呢?可以看下面这个简单例子,很好理解。

 

(1)先执行下面脚本,创建一个存储过程,分别有declare形式的变量和@set形式的变量

复制代码
DROP PROCEDURE IF EXISTS temp;
DELIMITER //
CREATE PROCEDURE temp()
BEGIN
    DECLARE a INT DEFAULT 1;

    SET a=a+1;
    SET @b=@b+1;
    SELECT a,@b;

END
//
DELIMITER ;   
复制代码

(2)接着为b变量初始化。

SET @b=1; 

(3)然后重复调用这个存储过程。

CALL temp();

(4)会发现a的值不改变,而b的值会一直增加。

 

  所以,总结起来就是开头那句话,declare定义的类似是局部变量,@set定义的类似全局变量。

 

posted @   PC君  阅读(24128)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示