mysql系统变量 用户变量 局部变量

mysql中变量分为系统变量,用户变量,局部变量
系统变量又分为全局(global)变量会话(session)变量,全局与会话的区别在于,全局是在服务重启之前的所有连接,而会话作用于当前一次的连接,这里的连接指的是navicate打开的一个查询窗口,或者cmd中一次mysql连接,或者jdbc中的一个connection.
用户变量局部变量作用域只是会话.并且局部变量的只在begin … end中有效.

系统变量

系统变量也就是mysql相关参数,如事务隔离级别,自动提交等
查看所有系统变量:

show variables;

查看特定的变量:
第一种方式:

show [global/session]  variables like 'xxx';

中括号中的内容是选填的,如果不写默认为session
在这里插入图片描述
第二种方式:

select @@[global/session.]变量名;

中括号中的内容是选填的,如果不写默认为session
在这里插入图片描述
一般情况会用第一种方式,因为很少会完全记住变量名,而第一种方式支持模糊查询.

设置系统变量:
set [global/session] 系统变量名=xxxx
或者 set @@global/session.系统变量=xxxx

用户变量

用户变量是个人定义的变量,与系统参数无关
用户变量前要加@
定义(赋值):

set @a=1;
set @a:=2;
select @a:=3;  //将查询结果赋值给用户变量
select 4 into @a //将查询结果赋值给用户变量

set 时 =:=都可以,但是select时必须要:=或者into的形式
查看:

select @a;

局部变量

局部变量作用于begin ... end语句中,并且必须紧接着在begin后面定义
局部变量的定义(用户变量与定义一样,局部变量必须显式定义)

declare a int [default 1]

变量赋值:

set a=1;
set a:=2;
select 3 into a; //将查询结果赋值给局部变量 局部变量不支持select a :=4
select 3,4 into a,b;

下面存储过程中展示局部变量的使用:

delimiter //
drop PROCEDURE if exists test//
create procedure test()
BEGIN
  declare a int;
   set a=1;
   select a;
   set a:=2;
   select a;
   select 4 into a;
   select a;
   select @a:=5;
   select a;
   select a+1 into a;
   select a;
end //
call test();

在这里插入图片描述
如上图所示,5个select a一共有6个结果,原因在于,begin end中可以操作用户变量,select @a:=5 操作的其实用户变量,并且这种语句会直接返回结果.
如果存储过程中有参数,那么就不需要在存储过程中再去定义了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值