一、系统变量
说明:系统变量是由系统提供,不是用户定义,属于服务器层面
使用语法:
- 查看所有的系统变量
show global | 【session】 variables;
- 查看满足部分条件的系统变量
show global | 【session】 variables like "%char%";
- 查看指定某个系统变量的值
select @@global | 【session】.系统变量名;
- 为某个系统变量赋值
//方式一
set global | 【session】 系统变量名 = 值;
//方式二
set @@global | 【session】.系统变量名 = 值;
注意:如果是全局级别,则需要加global,如果是会话级别,则需要加session ,如果不写则默认session
1. 全局变量
作用域:服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启
- 查看所有的全局变量
show global variables;
- 查看部分的全局变量
show global varables like "%char%";
- 查看指定的全局变量的值
select @@global.autocommit; //查看自动提交 非0代表true 自动提交
select @@tx_isolation; //查看隔离级别
- 为某个指定的全局变量赋值
set @@global.autocommit = 0; //设置非自动提交
2. 会话变量
作用域:仅仅对于当前会话(连接)有效
- 查看所有的会话变量
show session variables;
show variables;
- 查看部分的会话变量
show variables like "%char%";
show session variables like "%char%";
- 查看某个指定的会话变量
select @@tx_isolation;
select @@session.tx_isolation;
- 为某个会话变量赋值
//方式一:
set @@session.tx_isolation = "read-uncommitted";
//方式二:
set session tx_isolation = "read-committed";
二、自定义变量
说明:由用户自定义的,不是系统的
1. 用户变量
作用域:针对于当前会话(连接)有效,同于会话变量的作用域,应用在任何地方,也就是begin end里面或是 begin end 外面
- 声明并初始化
set @用户变量名 = 值;
set @用户变量名 := 值;
select @用户变量名 := 值;
- 赋值(更新用户变量的值)
方式一:通过set 或 select
set @用户变量名 = 值;
set @用户变量名 := 值;
select @用户变量名 := 值;
方式二: 通过select into
select 字段 into @变量名 from 表名;
- 使用 (查看用户变量的值)
select @用户变量名;
2. 局部变量
作用域:仅仅在定义它的begin end中有效,应用在 begin end中的第一句话!!!
- 申明
declare 变量名 类型;
declare 变量名 类型 default 值;
- 赋值
方式一:通过set 或 select
set 局部变量名 = 值;
set 局部变量名 := 值;
select @用户变量名 := 值;
方式二: 通过select into
select 字段 into 局部变量名 from 表名;
- 使用
select 局部变量;
3. 用户变量和局部变量的区别
作用域 定义和使用的位置 语法
用户变量: 当前会话 会话中的任何地方 必须加@符号,不用限定类型
局部变量: begin end中 只能在begin end中,且为第一句话 一般不用加@符号,需要限定类型
- 声明两个变量并赋初始值,求和,并打印
//用户变量
set @m = 1;
set @n = 2;
set @sum = @m + @n;
select @sum;
//局部变量
此种写法会报错,必须放到begin end 里面
declare m int default 1;
declare n int default 2;
declare sum int;
set sum = m + n;
select sum;