MySQL 变量
在 MySQL 中,变量用于 临时存储数据或控制数据库行为。根据来源和作用范围的不同,变量主要分为两大类:
- 系统变量:由 MySQL 系统提供
- 自定义变量:由用户自行定义
一、变量分类概览
变量
├── 系统变量
│ ├── 全局变量(GLOBAL)
│ └── 会话变量(SESSION)
└── 自定义变量
├── 用户变量
└── 局部变量
二、系统变量
1. 系统变量概念
系统变量 由 MySQL 服务器提供,用于控制数据库的运行行为,属于 服务器层面配置,用户不能自行创建,只能查看或修改已有变量。
2. 系统变量的类型
(1)全局变量(GLOBAL)
- 对 所有会话(连接) 生效
- 服务器启动时初始化
- 修改后 不能跨服务器重启
- 需要较高权限才能修改
(2)会话变量(SESSION)
- 只对 当前会话 生效
- 会话结束后自动失效
- 不影响其他连接
3. 查看系统变量
查看所有系统变量
-- 全局变量
SHOW GLOBAL VARIABLES;
-- 会话变量(SESSION 可省略)
SHOW SESSION VARIABLES;
按条件查询系统变量
SHOW GLOBAL VARIABLES LIKE 'char%';
SHOW SESSION VARIABLES LIKE 'char%';
查看指定系统变量
SELECT @@global.系统变量名;
SELECT @@session.系统变量名;
SESSION关键字可省略,默认使用会话变量。
4. 修改系统变量
方式一:SET 语句
-- 修改会话变量
SET SESSION 系统变量名 = 值;
-- 修改全局变量
SET GLOBAL 系统变量名 = 值;
方式二:简写形式
SET @@session.系统变量名 = 值;
SET @@global.系统变量名 = 值;
5. 作用域说明
-
全局变量
- 对所有会话有效
- 服务器重启后失效
-
会话变量
- 仅当前会话有效
- 修改不会影响其他会话
三、自定义变量
1. 自定义变量概述
自定义变量 由用户自行定义,使用灵活,常用于:
- 临时存储中间结果
- 控制 SQL 逻辑
- 存储查询结果
四、用户变量
1. 用户变量特点
- 变量名前必须加
@ - 作用域:当前会话(连接)
- 可以在任何 SQL 语句中使用
- 会话结束后自动销毁
2. 声明与初始化
用户变量 在声明时必须初始化,常见方式有三种:
SET @v1 = 20;
SET @v2 := 30;
SELECT @v3 := 40;
3. 赋值与更新
SET @v1 = 35;
SET @v1 := 50;
SELECT @v1 := 60;
使用查询结果赋值
SELECT 字段 INTO @变量名
FROM 表名;
查询结果必须是 单行单列。
4. 使用(查看)用户变量
SELECT @v1;
五、局部变量
1. 局部变量特点
- 必须声明
- 只能用于
BEGIN ... END代码块中 - 仅在定义它的代码块内有效
- 声明语句必须位于代码块的最前面
2. 声明局部变量
DECLARE 变量名 数据类型;
声明并初始化
DECLARE 变量名 数据类型 DEFAULT 值;
3. 局部变量赋值
SET 局部变量名 = 值;
SET 局部变量名 := 值;
使用查询结果赋值
SELECT 字段 INTO 局部变量名
FROM 表名;
4. 使用局部变量
SELECT 局部变量名;
六、用户变量与局部变量对比
| 对比项 | 用户变量 | 局部变量 |
|---|---|---|
| 是否需要声明 | 否(赋值即创建) | 是 |
是否需要 @ | 是 | 否 |
| 作用域 | 当前会话 | BEGIN...END 块 |
| 使用场景 | 普通 SQL | 存储过程、函数 |
七、小结
- MySQL 变量分为 系统变量 与 自定义变量
- 系统变量用于控制数据库行为
- 用户变量使用灵活,作用域为会话级
- 局部变量主要用于存储过程和函数中