变量分类:
- 系统变量
- 全局变量
- 会话变量
- 自定义变量
- 用户变量
- 局部变量
1. 系统变量
变量由系统提供,不是由用户自定义的。
相关语法
- 查看所有的系统变量(全局|会话,如果缺省默认为session)
SHOW GLOBAL|SESSION VARIABLES;
- 查看满足条件的部分系统变量
SHOW GLOBAL|SESSION VARIABLES LIKE '%char%';
- 查看指定的某个系统变量的值
SELECT @@global|@@session.系统变量名;
- 给某个系统变量赋值
SET @@global|session.系统变量名 = 值; -- 方式1
SET GLOBAL|SESSION 系统变量名 = 值; -- 方式2
作用域
- 全局变量:
属于服务器层面,当服务启动时,它将所有全局变量初始化为默认值,其作用域为服务器的整个生命周期,这意味着它针对所有的会话(连接)有效,但不能跨重启,即服务器重启后又会初始化。 - 会话变量:
仅仅针对于当前会话(连接)有效。
2. 自定义变量
变量由用户自定义的,不是由系统提供的。
- 使用步骤:
- 声明
- 赋值
- 使用(查看、比较、运算等)
用户变量
- 作用域:针对于当前会话(连接)有效,同于会话变量的作用域。可以定义在任何地方,begin end里面外面皆可。
- 使用
- 声明并初始化(必须在声明同时初始化)
SET @用户变量名 = 值; -- 方式1 SET @用户变量名 := 值; -- 方式2 SELECT @用户变量名 := 值; -- 方式3
- 赋值
-- 方式1:跟初始化时赋值方式相同 SET @用户变量名 = 值; SET @用户变量名 := 值; SELECT @用户变量名 := 值; -- 方式2:通过select into SELECT 字段 INTO @用户变量名 FROM 表;
- 使用(查看变量的值)
SELECT @用户变量名;
局部变量
- 作用域:仅仅在局部有效,即定义它的begin end里面有效。只能定义在begin end里面的开头。
- 使用
- 声明
DECLARE 变量名 类型; -- 方式1,只声明 DECLARE 变量名 类型 DEFAULT 初始值; -- 方式2,声明并初始化
- 赋值(跟用户变量相同)
-- 方式1 SET 局部变量名 = 值; SET 局部变量名 := 值; SELECT @局部变量名 := 值; -- 注意:这个要加@ -- 方式2:通过select into SELECT 字段 INTO 局部变量名 FROM 表;
- 使用(查看变量的值)
SELECT 局部变量名;
对比用户变量和局部变量
变量名 | 作用域 | 定义位置 | 语法 |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须加@,不用限定类型 |
局部变量 | begin end中 | begin end的开头 | 一般不用加@,需要限定类型 |