MySQL存储过程中declare和set定义变量的区别
2015-11-06 16:57
806 查看
在存储过程中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量。
1、declare定义的变量类似java类中的局部变量,仅在类中生效。即只在存储过程中的begin和end之间生效。
2、@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据。如何理解呢?可以看下面这个简单例子,很好理解。
(1)先执行下面脚本,创建一个存储过程,分别有declare形式的变量和@set形式的变量
(2)接着为b变量初始化。
(3)然后重复调用这个存储过程。
(4)会发现a的值不改变,而b的值会一直增加。
所以,总结起来就是开头那句话,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定义的类似全局变量。
相关文章推荐
- 更改MySQL数据库的编码为utf8mb4
- MYSQL函数大全
- MySQL Cluster, Fabric, Cobar 三大集群特性对比
- mysql的复制原理
- Play Framework jpa MySQL整合
- mysql5.7.9 源码安装
- mysql5.6 下载地址
- Windows环境下mysql自动备份
- MySQL general log、slow log配置及管理
- 防止人为误操作MySQL数据库技巧
- scala+play2.2.2+slick2.0.2 + mysql5.0整合之一---基础环境搭建篇
- mysql update中需要根据条件列更新写法update case
- mysql简单建表
- mysql 转orecle 需要考虑的问题
- mysql 卸载
- 修改MySQL字符集
- Play framework 2.x 连接mysql
- cmake 安装 mysql5.5 版本
- 如何使用playframework连接MySQL数据库
- MySql自定义函数