Mysql变量

Mysql变量

之前对mysql的变量概念很模糊, 作为一个有上进心的程序员有必要系统的理一下mysql的变量

mysql中变量可以分为全局变量, 会话变量, 用户变量和局部变量4个变量

1. 全局变量

全局变量就是mysql的系统变量, 我们只能访问有修改它, 但是不能申明它

全局变量在mysql中和 global 这个关键字息息相关的, 一般使用时 show global variables like '%log%'

全局变量是不可以自定义的
## 申明一个全局变量
set @@global.globalvar:='zhangsam';

## mysql系统会提示下面的错误
# ERROR 1193 (HY000): Unknown system variable 'globalvar'
查看全局变量
## 下面的两种方式都是可以的

## 该方式可以使用模糊匹配
show global variables like '%timeout%';
## 该方式必须清晰的记得变量的名称
select @@global.connect_timeout;
修改全局变量
## 修改和查看一样也有两种方式
set global lock_wait_timeout=60
set @@global.lock_wait_timeout=60;

2. 会话变量

会话变量也是session变量, 该变量的作用范围是当前的连接, 默认是和全局变量一致的, 当前会话修改后全局变量不会发生变更

会话断开重连后该域中设置的变量将会被重置

会话变量是不可以自定义的
## 申明一个会话变量
set @@session.globalvar:='zhangsam';
set @@globalvar:='zhangsam';

## mysql系统会提示下面的错误
# ERROR 1193 (HY000): Unknown system variable 'globalvar'
查询会话变量
## 会话变量有下面的四种访问方式, 默认访问的当前session的变量
show session variables like '%timeout%';
show variables like '%timeout%';
select @@session.lock_wait_timeout;
select @@lock_wait_timeout;
修改会话变量
## 修改session变量也存在四种方式
set session lock_wait_timeout=80;
set lock_wait_timeout=80;
set @session.lock_wait_timeout=80;
set @lock_wait_timeout=80;

3. 用户变量

用户变量和session变量的作用域一致都是当前会话, 唯一差别可能就是用户变量可以自定义

用户变量不需要申明, 直接使用即可

用户变量自赋值
## mysql中下面的3中方式都可以给用户变量赋值
set @name='zhangsam';
select @name:=`name` from user limit 0,1;
select `name` into @name from user limit 0,1;
用户变量查询
select @name;

4. 局部变量

mysql的局部变量和java的局部变量相识, 只能作用在方法中(begin/end语句块中), 使用前需先使用 declare 申明

申明
## 申明变量, 方式和表属性一致
declare name varchar(32) default '';
赋值
## 下面2中方式都可以为局部变量赋值
set name:='zhangsam';
select `name` into name from user limit 0,1;

关于 = 和 := 的区别

mysql中 = 一般是做比较的, 而:= 才是赋值, 在不引起歧义的情况下 =:= 是通用的

## 这种情况就不能赋值, 因为select中会将 `=` 解析为判断符
select @name=`name` from user where id='1717e83b335811eaa04a00ace989c008';

## 所以该情况下只能使用 `:=` 赋值
select @name:=`name` from user where id='1717e83b335811eaa04a00ace989c008';

关于 := 和 into 的区别

mysql中这两种方式都能在select被赋值, 区别也就下面的一点区别

  1. 局部变量只能使用 into 赋值
  2. 用户变量可以使用 into:= 赋值

你可能感兴趣的:(Mysql变量)