mysql 变量生命周期_(十)MySQL中的变量

通常认为,MySQL中的变量可分为:

局部变量

用户变量

会话变量

全局变量

下面将逐一对其进行介绍。

1、局部变量

局部变量只在当前BEGIN……END代码块中有效,其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。

DECLARE语句专门用于定义局部变量,可以使用DEFAULT语句来指明默认值。

定义局部变量的语法结构:

DECLARE var_name [,……] type [DEFAULT value];

使用SET语句赋值局部变量:

set var_name = value;

使用SELECT语句赋值局部变量:

SELECT col_name[,...] INTO var_name [FROM tbl_name] [WHERE……];

创建存储过程p1用来演示局部变量的相关操作:

1%7Cimageslim

其中变量c就是由DECLARE语句定义的局部变量,调用后结果如下:

1%7Cimageslim

SELECT语句赋值在(九)MySQL存储过程中的第5部分演示过,这里就此省略。

2、用户变量

用户变量的作用域比局部变量要广,用户变量与连接有关。也就是说,一个客户端定义的变量不能被其它客户端看到或使用。当客户端退出时,该客户端连接的所有变量将失效。

用户变量不需要事前声明,可以直接使用,用户变量以@var_name的形式命名变量,变量名必须以@开头。

使用SET语句赋值局部变量:

SET @var_name = value;

SET @var_name := value;

使用SELECT语句赋值局部变量:

SELECT @var_name := value;

关于“=”与“:=”的区别:

对于SET语句而言,两种方式都可以使用;

对于SELECT语句而言,只能使用“:=”,因为在SELECT语句中,“=”被看作是比较操作符。

创建存储过程p2用来演示用户变量的相关操作:

1%7Cimageslim

其中变量@sum和@prod就是使用SELECT语句赋值的用户变量,调用后结果如下:

1%7Cimageslim

剩余的变量@var1和@var2则是使用SET语句赋值的用户变量,查询后结果如下:

1%7Cimageslim

3、系统变量

MySQL可以访问许多系统和连接变量。当服务器运行时许多变量允许动态更改。这样就可以修改服务器操作而不需要停止并重启服务器。

mysqld服务器维护两种变量:会话变量影响具体客户端连接的操作;全局变量影响服务器整体操作。

4、会话变量

服务器为每个连接的客户端维护一系列会话变量。会话变量在每次建立一个新的连接时,MySQL会将当前所有的全局变量复制一份做为会话变量,也就是说,如果在建立会话以后,没有人为更改过会话变量与全局变量的值,那这两份变量的值应该都是一一对应,完全一致的。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。会话变量的作用域与用户变量一样,仅限于当前连接。当前连接断开后,其设置的所有会话变量均失效。

赋值会话变量的方式:

SET SESSION var_name = value;

SET @@SESSION.var_name = value;

SET var_name = value;

查询会话变量的方式:

SELECT @@var_name;

SELECT @@SESSION.var_name;

SHOW SESSION VARIABLES [LIKE '%var%'];

注意:

凡是上面提到的“SESSION”关键字,都可以用“LOCAL”关键字来代替,例如:

SELECT @@LOCAL.var_name;

查询“sort_buffer_size”来演示会话变量的相关操作:

1%7Cimageslim

5、全局变量

当服务器启动时,会将所有全局变量初始化为默认值。这些默认值可以在选项文件中或在命令行中指定的选项进行更改,要想更改全局变量,必须具有SUPER权限。全局变量作用于SERVER的整个生命周期,但是不能跨重启,即重启后所有设置的全局变量均失效。要想让全局变量重启后继续生效,需要更改相应的配置文件。

赋值全局变量的方式:

SET GLOBAL var_name = value;

SET @@GLOBAL.var_name = value;

查询全局变量的方式:

SELECT @@GLOBAL.var_name;

SHOW GLOBAL VARIABLES [LIKE '%var%'];

查询“sort_buffer_size”来演示全局变量的相关操作:

1%7Cimageslim

无论是在设置系统变量还是查询系统变量值的时候,只要没有指定到底是全局变量还是会话变量。都当做会话变量来处理。

注意:

赋值变量时不指定关键字GLOBAL、SESSION或LOCAL,则默认使用SESSION关键字;

当使用SELECT @@var_name检索变量时(即不指定关键字GLOBAL、SESSION或LOCAL),MySQL返回SESSION值(如果存在),否则返回GLOBAL值;

对于SHOW VARIABLES,如果不指定关键字GLOBAL、SESSION或LOCAL,MySQL返回SESSION值。

6、MySQL中的变量SQL语句汇总:

局部变量

定义局部变量:

DECLARE var_name [,……] type [DEFAULT value];

使用SET语句赋值局部变量:

set var_name = value;

使用SELECT语句赋值局部变量:

SELECT col_name[,...] INTO var_name [FROM tbl_name] [WHERE……];

用户变量

使用SET语句赋值局部变量:

SET @var_name = value;

SET @var_name := value;

使用SELECT语句赋值局部变量:

SELECT @var_name := value;

会话变量

赋值会话变量的方式:

SET SESSION var_name = value;

SET @@SESSION.var_name = value;

SET var_name = value;

查询会话变量的方式:

SELECT @@var_name;

SELECT @@SESSION.var_name;

SHOW SESSION VARIABLES [LIKE '%var%'];

注意:

凡是上面提到的“SESSION”关键字,都可以用“LOCAL”关键字来代替,例如:

SELECT @@LOCAL.var_name;

全局变量

赋值全局变量的方式:

SET GLOBAL var_name = value;

SET @@GLOBAL.var_name = value;

查询全局变量的方式:

SELECT @@GLOBAL.var_name;

SHOW GLOBAL VARIABLES [LIKE '%var%'];

版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作! ↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值