【mysql基础系列十四】变量

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编程时,不会使用自定义变量来控制全局。一般都是定义会话变量或者在结构中使用局部变量来解决问题。

猜你喜欢

转载自blog.csdn.net/pjz161026/article/details/80879408