mysql本质是一种编程语言,需要很多变量来保存数据。mysql中很多的属性控制都是通过mysql或者能够固有的变量来实现的。
系统变量
系统内部定义的变量,针对所有用户(mysql客户端)有效。
1、系统变量查询
show variables; //查看所有系统变量
show variables like 'patten'; //查询指定变量,支持模糊查询
mysql允许用户使用select查询变量的数据值(系统变量)。
select @@系统变量名;
注意:使用select关键字查询出来的才是数据库中保存的值。如变量autocommit通过show展示出啦的是on/off,通过select展示出来的是0/1;
2、系统变量修改
方式一:局部修改(会话级别)
只针对当前自己客户端当次联系有效。
set 变量名 = 数值;
方式二:全局修改
针对新开客户端,永久有效。
set global 变量名 = 值;
或者
set @@global.变量名 = 值;
注意:全局修改只针对新客户端生效,当前已连接客户端无效。
会话变量
会话变量也称用户变量,会话变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。
set @变量名 = 值; //设置会话变量
select @变量名; //查看会话变量
局部变量
作用范围在begin到end语句块之间。在该语句块中设备的变量,declare关键字专门用于定义局部变量。
declare 变量名 数据类型 【属性】;
begin-end语句块主要用于 函数/存储过程/触发器 等大型语句块中。
变量作用域
1、局部作用域
使用declare关键字声明(在结构体内:函数、存储过程、触发器),而且只能在结构体内部使用。
declare关键字声明的变量没有任何符号修饰,就是普通字符串,如果在外部访问该变量,系统会默认为是字段。
2、会话作用域
用户定义的,使用set + @符号定义的变量。
仅在当前用户当次连接有效。只要在本连接中,任何地方都可以使用(可以在结构体内部,也可以跨库)。
3、全局作用域
所有客户端连接都有效。需要使用全局符号来定义:global 或者 @@。
通常,在SQL编程时,不会使用自定义变量来控制全局。一般都是定义会话变量或者在结构中使用局部变量来解决问题。