mysql的存储过程中很多地方用到了变量,因此觉得有必要再这里详细讲述下mysql的变量。小编也浏览了大量的关于mysql变量的文章,对于变量的分类也是众说纷纭,不过大致还是分为了这么几类,用户变量,局部变量,会话变量,全局变量,系统变量,那么这些分类又该如何归类,他们有没有什么从属关系呢,最终小编决定选择了一种看上去算是比较合理的分类。
用户变量
局部变量
会话变量
系统变量
会话变量
全局变量
大分类就是用户和系统变量,用户变量又分为了会话变量和局部变量,系统变量又分为了会话变量和全局变量,下面我们就逐一介绍。
用户变量->局部变量
局部变量出现在存储过程的过程体中,也就是begin和end之间,作用范围仅限于过程体中,因此称之为局部变量。
定义局部变量的语法
declare 变量名 变量类型(mysql的数据类型)
赋值
set 变量名 = 变量值
use test;
delimiter //
create procedure test(IN num1 INT,IN num2 INT)
begin
declare num3 INT;
set num3 = num1+num2;
select num3;
end
//
delimiter ;
call test(10,20);
上述代码中num3就是一个局部变量。
用户变量->会话变量
会话变量的作用范围是当前客户端范围内都有效。
语法
set @变量名 = 变量值
use test;
delimiter //
create procedure test()
begin
select @num;
end
//
delimiter ;
set @num = 1;
call test();
上述代码中,调用存储过程test会返回@num为1。可见在存储过程中@num同样生效。
系统变量->会话变量
在mysql建立连接的时候,会将当前的全局变量拷贝一份作为会话变量,修改会话变量只会影响当前客户端。
更改会话变量
set session wait_timeout = 14400;
or
set @@session.wait_timeout = 14400;(简写:set @@wait_timeout = 14400)
查询会话变量
select @@session.wait_timeout;(简写:select @@wait_timeout)
系统变量->全局变量
作用范围为全局,也就是影响所有客户端。
更改全局变量
set global wait_timeout = 14400;
or
set @@global.wait_timeout = 14400;
查询全局变量
select @@global.wait_timeout;
注意事项
我们经常使用的show variables,select @@变量名,set @@ 变量名其实对应的都是会话变量,想要查看或者更改全局变量,记得加global关键字。