变量分为:
- 系统变量:服务器层面上的,必须拥有super权限才能为系统变量赋值
- 全局变量(global)
- 会话变量(session)
- 自定义变量
- 用户变量
- 局部变量
1、系统变量
说明:系统变量由系统提供,不是由用户定义,属于服务器层面。
语法:
1、查看所有的系统变量
|
|
SHOW GLOBAL|[SESSION] VARIABLES LIKE ‘%char%’;```
3、查看指定的某个系统变量的值
|
|
SET GLOBAL|[SESSION]系统变量名 = 值;```
方式2:
|
|
mysql /* 作用域:服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启 */
①查看所有全局变量
SHOW GLOBAL VARIABLES;
②查看部分全局变量
SHOW GLOBAL VARIABLES LIKE ‘%char%’;
③查看指定的全局变量的值
SELECT @@global.autocommit; SELECT @@global.tx_isolation;
④为某个指定的全局变量赋值
SET @@global.autocommit = 1; # 跨连接有效
1
|
### ②会话变量 |
mysql /* 作用域:仅仅针对于当前会话(连接)有效 */
①查看所有会话变量
SHOW VARIABLES; SHOW SESSION VARIABLES;
②查看部分会话变量
SHOW VARIABLES LIKE ‘%char%’; SHOW SESSION VARIABLES LIKE ‘%char%’;
③查看指定的会话变量的值
SELECT @@tx_isolation; SELECT @@session.tx_isolation;
④为某个指定的会话变量赋值
方式1:
SET @@tx_isolation = ‘read-uncommited’; SET @@SESSION.tx_isolation = ‘read-uncommitted’;
方式2:
SET tx_isolation = ‘read-committed’; SET SESSION tx_isolation = ‘read-committed’;
1 2 3 4 5 6 7 |
## 2、自定义变量 说明:自定义变量是用户自定义的,不是由系统定义的 使用步骤:声明——赋值——使用(查看、比较、运算等) ### ①用户变量 |
MYSQL /* 作用域:针对于当前会话(连接)有效,和会话变量的作用域相同 应用在任何地方,也就是BEGIN …… END 里面或者外面 */
1
|
赋值的操作符: ```=``` 或``` :=``` |
mysql
①声明并初始化
1 2 3 4 5 6 |
#方法一: # SET @用户变量名 = 值; #方法二: # SET @用户变量名 := 值; #方式三: # SELECT @用户变量名 := 值; |
②赋值(更新用户变量的值)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#方式一:通过SET 或 SEECT # SET @用户变量名 = 值; # SET @用户变量名 := 值 # SELECT @用户变量名 := 值; # 案例: SET @name = 'john'; SET @name = 100; # 方式二:通过 SELECT INTO /* SELECT 字段 INTO @变量名 FROM 表; */ # 案例: SET @count = 1; SELECT COUNT(*) INTO @count FROM employees; |
③使用(查看用户变量的值)
1 2 3 |
# SELECT @用户变量名; # 案例: SELECT @count; |
1
|
### ②局部变量 |
mysql /* 作用域:仅仅在定义它的BEGIN …… END中有效 应用在 BEGIN……END中,且只能是第一句话!!!! */
mysql
① 声明
DECLARE 变量名 类型; DECLARE 变量名 类型 DEFAULT 值;
②赋值
1 2 3 4 5 6 7 |
# 方式1:通过SET 或 SELECT SET 局部变量名 = 值; SET 局部变量名 := 值; SELECT @局部变量名 := 值; # 方式2:通 SELECT INTO SELECT 字段 INTO 局部变量名 FROM 表; |
③使用
SELECT 局部变量名;
案例:声明2个变量并赋初始值,求和,并打印
1 2 3 4 5 6 7 8 9 10 11 |
# 1、用户变量 SET @m := 1; SET @n := 2; SET @sum := @m + @n; SELECT @sum; # 2、局部变量(报错,需放在BEGIN……END中) DECLARE m INT DAFAULT 1; DECLARE n INT DEFAULT 2; DECLARE sum INT; SET sum = m + n; SELECT sum; |
```
对比用户变量和局部变量:
作用域 | 定义和使用的位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须加上@符号;不用限定类型 |
局部变量 | BEGIN……END中 | 只能在BEGIN……END中,且为第一句话 | 一般不用加@符号;需要限定类型 |