mysql中变量的种类以及定义、赋值
mysql中存在局部变量、用户变量、会话变量、全局变量,其中会话变量和全局变量统称为系统变量。
一、局部变量
局部变量一般用在sql语句块中,比如存储过程的begin/end。其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。
declare语句专门用于定义局部变量,可以使用default来说明默认值,通过set赋值或者select into 赋值。
declare A int default 1;
set A=2;
declare B varchar(20);
select name into B from table where id=1; #不能通过select := 赋值
二、用户变量
用户变量与数据库连接有关,到数据库实例接断开的时候,变量就会消失。
mysql中用户变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
可以通过set或者select赋值:
set @a=1;
select @b:=name from table where id=1;
select name into @b from table where id=1;
select @c:='abc';
三、系统变量
系统变量分为全局变量与会话变量。
查看所有系统变量:
show session variables;
show global variables
(1)会话变量
服务器为每个连接的客户端维护一系列会话变量。在客户端连接数据库实例时,使用相应全局变量的当前值对客户端的会话变量进行初始化。
设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。
会话变量的作用域与用户变量一样,仅限于当前连接。当当前连接断开后,其设置的所有会话变量均失效。二者有些类似,不过用户变量是面向用户自定义使用的,会话变量是面向用户维护数据库的。
设置会话变量有如下四种方式更改会话变量的值:
set session var_name = value;
set var_name = value; #缺省session关键字默认认为是session
set @@session.var_name = value;
set @@var_name = value; #缺省session关键字默认认为是session
查看一个会话变量有如下三种方式:
select @@var_name; #省略了session
select @@session.var_name;
show session variables like "%var%";
凡是上面提到的session,都可以用local这个关键字来代替,二者为近义词。
(2)全局变量
全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改。
全局变量作用于server的整个生命周期,但是不能跨重启。即重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效,需要更改相应的配置文件。
要设置一个全局变量,有如下两种方式
set global var_name = value; //注意:此处的global不能省略。根据手册,set命令设置变量时若不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION
set @@global.var_name = value; //同上
不过要想更改全局变量的值,需要拥有SUPER权限
要想查看一个全局变量,有如下两种方式:
select @@global.var_name;
show global variables like “%var%”;
本文地址:https://blog.csdn.net/qq_41286138/article/details/107161836