一、系统变量
由系统提供,属于服务器层面的变量
1)查看所有系统变量
语法:show global|[session] variables; #默认session
2)查看符合条件的部分系统变量
show global|[session] variables like '%char%'; #默认session
3)查询指定的系统变量
select @@global|session.系统变量名; #默认session
4)为系统变量赋值
set global|session 系统变量名 = 值;
set @@global|session.系统变量名 = 值;
注:
a)全局系统变量,global不能省略,会话系统变量,session可以省略。
b)修改全局系统变量,跨连接有效,修改会话系统变量,只针对当前连接有效。
二、自定义变量
用户定义的变量。
1)用户变量
作用域:只针对当前会话(连接)有效。
声明并初始化变量
set @变量名 = 值; 或
set @变量名 := 值; 或
select @变量名 := 值; 或
select 字段 into 变量名 from 表
mysql> select count(*) into @total from students;
Query OK, 1 row affected (0.20 sec)
mysql> select @total;
+--------+
| @total |
+--------+
| 6 |
+--------+
1 row in set (0.00 sec)
2)局部变量
作用域:仅仅在定义它的begin...end中有效
声明变量:
declare 变量名 数据类型 [default 值];
赋值和用户变量赋值相同。
set @变量名 = 值; 或
set @变量名 := 值; 或
select @变量名 := 值; 或
select 字段 into 变量名 from 表
三、用户变量和局部变量的区别
变量 | 作用域 | 定义和使用的位置 | 语法 |
---|---|---|---|
用户变量 | 当前会话 | 会话的任意地方 | 必须加@符号,不用限定数据类型 |
局部变量 | begin...end中 | 只能在begin...end中,且为第一句 | 一般不用加@符号,需要限定数据类型 |