MySQL变量


变量

系统变量

系统变量分类

系统变量分为全局系统变量(需要添加global关键字)以及会话系统变量(需要添加session关键字),有时也把全局系统变量简称为全局变量,有时也把会话系统变量称为local变量。如果不写,默认会话级别。静态变量(在 MySQL 服务实例运行期间它们的值不能使用 set 动态修改)属于特殊的全局系统变量。

  • 全局系统变量针对于所有会话(连接)有效,但不能跨重启

  • 会话系统变量仅针对于当前会话(连接)有效。会话期间,当前会话对某个会话系统变量值的修改,不会影响其他会话同一个会话系统变量的值。

  • 会话1对某个全局系统变量值的修改会导致会话2中同一个全局系统变量值的修改。

查看系统变量

  • 查看所有或部分系统变量
#查看所有全局变量 
SHOW GLOBAL VARIABLES; 
#查看所有会话变量 
SHOW SESSION VARIABLES; 
#或
SHOW VARIABLES;
#查看满足条件的部分系统变量。 
SHOW GLOBAL VARIABLES LIKE '%标识符%';
#查看满足条件的部分会话变量 
SHOW SESSION VARIABLES LIKE '%标识符%';
  • 查看指定系统变量

作为 MySQL 编码规范,MySQL 中的系统变量以两个“@”开头,其中“@@global”仅用于标记全局系统变量,“@@session”仅用于标记会话系统变量。“@@”首先标记会话系统变量,如果会话系统变量不存在,则标记全局系统变量。

#查看指定的系统变量的值 
SELECT @@global.变量名; 
#查看指定的会话变量的值 
SELECT @@session.变量名; 
#或者 
SELECT @@变量名;

修改系统变量的值

  • 方式1:修改MySQL 配置文件 ,继而修改MySQL系统变量的值(该方法需要重启MySQL服务)

  • 方式2:在MySQL服务运行期间,使用“set”命令重新设置系统变量的值

#为某个系统变量赋值 
#方式1: 
SET @@global.变量名=变量值; 
#方式2: 
SET GLOBAL 变量名=变量值;
#为某个会话变量赋值 
#方式1: 
SET @@session.变量名=变量值; 
#方式2: 
SET SESSION 变量名=变量值;

用户变量

用户变量分类

用户变量是用户自己定义的,作为 MySQL 编码规范,MySQL 中的用户变量以一个“@”开头。根据作用范围不同,又分为会话用户变量和局部变量。

  • 会话用户变量:作用域和会话变量一样,只对当前连接会话有效。

  • 局部变量:只在 BEGIN 和 END 语句块中有效。局部变量只能在存储过程和函数中使用。

会话用户变量

  • 变量的定义
#方式1:“=”或“:=” 
SET @用户变量 = ; 
SET @用户变量 := 值; 
#方式2:“:=” 或 INTO关键字 
SELECT @用户变量 := 表达式 [FROM 等子句]; 
SELECT 表达式 INTO @用户变量 [FROM 等子句];
• 查看用户变量的值 (查看、比较、运算等)
SELECT @用户变量

局部变量

定义:可以使用DECLARE语句定义一个局部变量

作用域:仅仅在定义它的 BEGIN ... END 中有效

位置:只能放在 BEGIN ... END 中,而且只能放在第一句

BEGIN
    #声明局部变量 
    DECLARE 变量名1 变量数据类型 [DEFAULT 变量默认值]; 
    DECLARE 变量名2,变量名3,... 变量数据类型 [DEFAULT 变量默认值];
    #为局部变量赋值 
    SET 变量名1 = ; 
    SELECT 值 INTO 变量名2 [FROM 子句]; 
    #查看局部变量的值 
    SELECT 变量1,变量2,变量3; 
END

1.定义变量

DECLARE 变量名 类型 [default 值]; # 如果没有DEFAULT子句,初始值为NULL

2.变量赋值

方式1:一般用于赋简单的值
SET 变量名=; 
SET 变量名:=值;
方式2:一般用于赋表中的字段值
SELECT 字段名或表达式 INTO 变量名 FROM 表;

3.使用变量(查看、比较、运算等)

SELECT 局部变量名;

对比会话用户变量与局部变量

作用域:定义位置

语法:

会话用户变量

  • 当前会话
  • 会话的任何地方
  • 加@符号,不用指定类型

局部变量

  • 定义它的BEGIN END中
  • BEGIN END的第一句话
  • 一般不用加@
  • 需要指定类型