变量
2021年9月11日大约 2 分钟
1. 系统变量
1.1 说明
变量由系统提供,不是用户定义,属于服务器层面
1.2 分类
- 全局变量
- 作用域:服务器每次启动将为所有的全局变量赋初始值,全局变量针对于所有的会话(连接)有效,但是不能跨重启,每次重启服务器后会根据配置文件的配置来进行系统变量的初始赋值
- 会话变量
- 作用域:仅仅针对于当前会话(连接)有效
1.3 语法
注意:如果是全局级别,则需要加 GLOBAL,如果是会话级别,则需要加 SESSION 或者不写(不写默认为SESSION)
(1)查看所有的系统变量
SHOW GLOBAL|【SESSION】 VARIABLES;
(2)查看满足条件的部分系统变量
SHOW GLOBAL|【SESSION】 VARIABLES LIKE '%char%';# 举例
(3)查看指定的某个系统变量的值
SELECT @@global|【session】.系统变量名
(4)为某个系统变量赋值
①方式一
set GLOBAL|【SESSION】 系统变量名 = 值;
②方式二
set @@global|【session】.系统变量名 = 值;
2. 自定义变量
2.1 说明
变量是由用户自定义的,不是系统的
2.2 使用步骤
(1)声明
(2)赋值
(3)使用:查看、比较、运算等
2.3 分类
(1)用户变量
作用域:针对于当前会话(连接)优先,可以应用在任何地方,也就是 begin end 里面或者 begin end 外面
使用步骤:
①声明并初始化
赋值操作符:= 或 :=
SET @用户变量名=值; SET @用户变量名:=值; SELECT @用户变量名:=值;
②赋值或更新
方式一:通过SET或SELECT SET @用户变量名=值; SET @用户变量名:=值; SELECT @用户变量名:=值; 方式二:通过SELECT INTO SELECT 字段 INTO 用户变量名 FROM 表名;
③使用
SELECT @用户变量名;
案例
# 声明并初始化 SET @count = 1; # 赋值 USE myemployees; SELECT COUNT(*) INTO @count FROM employees; # 使用(查看) SELECT @count;
(2)局部变量
作用域:仅仅定义在它的 begin end 中有效,并且必须应用在 begin end 中的第一句话!!!
使用步骤:
①声明并初始化
赋值操作符:DECLARE
DECLARE 变量名 类型; DECLARE 变量名 类型 DEFAULT 值;
②赋值或更新
方式一:通过SET或SELECT SET 局部变量名=值; SET 局部变量名:=值; SELECT @局部变量名:=值; 方式二:通过SELECT INTO SELECT 字段 INTO 局部变量名 FROM 表名;
③使用
SELECT @局部变量名;
(3)对比用户变量和局部变量
变量类型 | 作用域 | 定义和使用的位置 | 语法 |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何位置 | 必须加@符号,不用限定类型 |
局部变量 | BEGIN END中 | 只能在 BEGIN END 中,且为第一句话 | 一般不用加@符号,需要限制类型 |