Mysql本质是一种编程语言,需要很多变量来保存数据。Mysql中很多的属性控制都是通过mysql中固有的变量来实现的。
由MySQL数据库系统提供的变量,无需用户定义。根据作用域的不同,系统变量可分为全局变量和会话变量。
- 全局变量: 针对整个服务器,即所有的连接都起作用,若服务器重启则会恢复原始,之前所做的更改都会无效。
- 会话变量(局部变量):只针对当前自己客户端当次连接有效,不影响其它的连接。
系统变量
系统内部定义的变量,系统变量针对所有连接有效
-
使用匹配方式查看系统变量
SHOW [GLOBAL|SESSION] VARIABLES [LIKE <变量匹配表达式>];
-
查看指定的某个系统变量
不指定变量的作用范围[GLOBAL|SESSION]时,默认是会话级别的。
SELECT @@[GLOBAL|SESSION.]<变量名>;
-
修改变量
#方式1: SET @@[GLOBAL|SESSION.]<变量名> = <值>; #方式2: SET [GLOBAL|SESSION.] <变量名> = <值>;
全局修改之后:所有连接的客户端并没发现改变?
全局修改只针对新客户端生效(正在连着的无效)
注意:如果想要本次连接对应的变量修改有效
,那么不能使用全局修改,只能使用会话级别
修改(set 变量名 = 值);
自定义变量
自定义变量是由用户自己定义的变量,可分为用户变量
和局部变量
。
用户变量
- 用户变量:作用域是当前会话,也就是本次连接
-
变量的声明和初始化
SET @<变量名> = <值>;
-
变量的赋值或者修改
#方式1: SET @<变量名> = <值>; #方式2: SET @<变量名> := <值>; #方式3: SELECT <字段,表达式> INTO @<变量名> [FROM <表>];
-
局部变量
-
局部变量:作用域在
BEGIN END
块中。- 变量的声明和初始化
变量的声明语句必须放在BEGIN END的最前面,即声明语句之前不能有其他语句。
DECLARE <变量名> <变量类型> [default <默认值>];
- 变量的赋值或者修改
#方式1: SET <变量名> = <值>; #方式2: SET <变量名> := <值>; #方式3: SELECT <字段,表达式> INTO <变量名> [FROM <表>];
局部变量的操作和用户变量的操作的差异就在于在变量名的前面少使用一个@符号。