1.局部变量
用户自定义,在begin/end块中有效
语法:declare 变量名 数据类型 [default 默认值]
举例:declare name varchar(10);
delimiter $
create procedure func()
begin
declare name varchar(10) default '张三';
set name = '李四';--给变量赋值
select name;--输出变量的值
end $
delimiter;
call func();--调用
另一种赋值方式:用select...into...将查询结果赋值给变量 。
查询的返回结果必须是单行单列,例如
delimiter $
create procedure func()
begin
declare name varchar(10);
/*将查询结果classname赋值给变量name*/
SELECT classname into name from class WHERE classname='数学';
select name;
end $
delimiter;
2.用户变量
当前会话连接有效,类比java的成员变量
语法:set @变量名;
delimiter $
create procedure func()
begin
set @name='张三';
end $
delimiter;
call func();--调用一次后,@name变量就可以在外部使用了
SELECT @name;
3.系统变量
- 系统变量又分为全局变量与会话变量
- 全局变量在Mysql启动时由服务器自动将它们初始化为默认值,这些默认值可以通过my.ini文件修改
- 会话变量在每次建立一个新的连接时,由Mysql初始化。mysql会将当前所有全局变量的值复制一份,来作为会话变量。
- 全局变量与会话变量的区别在于,对全局变量修改会影响到整个服务器,但是对会话变量修改,只会影响当前会话(也就是当前·数据库的连接)
- 有些系统变量的值可以利用语句来动态修改,但是有些变量的值是只读的,对于那些可更改的系统变量,可以利用set语句修改
--系统变量(全局变量)
--查看全局变量
show global variables;
--查看某全局变量
select @@gloabal.变量名;
--修改全局变量的值
set gloabal 变量名 = ;
--系统变量(会话变量)
--查看会话变量
show session variables;
--查看某会话变量
select @@session.变量名;
--修改会话变量值
set session 变量名 = ;