系统变量
系统变量:由系统提供的变量,不是用户自定义的。
查看所有系统变量:
show global|[session] variables
查看满足指定条件的系统变量:
-- 如:查看所有名字中带char的变量
show global|[session] variables like '%char%';
查看指定的某个系统变量的值:
select @@global|[session].系统变量名;
例如:
MariaDB [myemployees]> select @@global.character_set_client;
+-------------------------------+
| @@global.character_set_client |
+-------------------------------+
| utf8 |
+-------------------------------+
1 row in set (0.000 sec)
为某个系统变量赋值:
-- 方式一
set global|[session] 系统变量名 = 值;
-- 方式二
set @@global|[session].系统变量名 = 值;
全局变量
数据库服务器每次启动,都会为所有的全局变量赋初始值,针对所有会话(连接)有效(例如开了很多个操作数据库的cmd窗口,一个窗口就是一个会话,在一个会话中修改了全局变量的值,其他会话中的全局变量值也会发生改变),但不能跨重启(即服务器重启后,所有全局变量的值又恢复为默认值)。
查看所有全局变量:
show global variables;
查看满足指定条件的全局变量
-- 如:查看所有名字中带char的变量
show global variables like '%char%';
查看指定的全局变量的值
select @@global.系统变量名;
为指定的全局变量赋值 ```sql — 方式一 set global 系统变量名 = 值;
— 方式二 set @@global.系统变量名 = 值;
<a name="rtQAc"></a>
### 会话变量
服务器会为每个会话提供一组会话变量,会话变量仅针对当前会话有效,即在一个会话中修改了会话变量,对其他会话中的会话变量值不造成影响。
1. 查看所有会话变量
```sql
-- 方式一
show variables;
-- 方式二
show session variables;
查看满足指定条件的会话变量
-- []表示可选
-- 例如:查看变量名带char的会话变量
show [session] variables like '%char%';
查看指定的会话变量 ```sql — 如:查看隔离级别 select @@tx_isolation;
— 完整写法 select @@session.tx_isolation;
4. 为某个会话变量赋值
```sql
-- 方式一
set session 会话变量名 = 值;
-- 方式二
set @@session.会话变量名 = 值;
自定义变量
自定义变量:由用户自行定义。
用户变量
作用域:仅针对于当前会话(连接)有效
- 声明并初始化 ```sql — 写法一 set @用户变量名 = 值;
— 写法二 set @用户变量名 := 值;
— 写法三 select @用户变量名 := 值;
2. 赋值(更新变量值)
方式一:通过 `set` 和 `select`
```sql
-- 写法一
set @用户变量名 = 值;
-- 写法二
set @用户变量名 := 值;
-- 写法三
select @用户变量名 := 值;
方式二:通过 select into
select 字段 into @用户变量名 from 表;
例如:
-- 对count变量进行赋值
select count(*) into @count from employees;
-- 读取count变量中的值
select @count;
作用域:仅在定义它的 begin end
块中有效。
- 声明 ```sql — 方式一 declare 变量名 类型;
— 方式二:指定了默认值 declare 变量名 类型 default 值;
2. 赋值
方式一:通过 `set` 和 `select`
```sql
-- 写法一
set 局部变量名 = 值;
-- 写法二
set 局部变量名 := 值;
-- 写法三
select @局部变量名 := 值;
方式二:通过 select into
select 字段 into 局部变量名 from 表;
- 使用
select @局部变量名;
用户变量与局部变量对比
作用域 | 定义和使用的位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须加@符号,不用限定类型 |
局部变量 | BEGIN END 块中 |
只能在BEGIN END 块中,且为第一句话 |
一般不加@符号,除非和 select 一起用时,需要限定类型 |