变量分类
一、系统变量
说明:变量由系统提供,不是用户自定义,属于服务器层面
使用的语法:
-
查看所有的系统变量
-
- show global | session variables;
-
查看满足条件的系统变量
-
- show global | session variables like '%参数%';
-
查看指定的某个系统值
-
- select @@系统变量名;
-
为某个具体的系统变量赋值
-
- set global | session 系统变量名 = 值;
- set @@global | session.系统变量名 = 值;
(一)全局变量
作用域:服务器每次启动将为所有的全局变量赋初始值,
针对于所有的会话(连接)有效,但不能跨重启。
①查看所有全局变量
show global variables;
②查看部分的全局变量
show global variables like '%char%';
③查看指定的全局变量的值
select @@global.autocommit;
④为某个指定的全局变量赋值
set @@global.autocommit=0;
(二)会话变量
作用域:仅仅针对于当前的会话(连接)有效。
①查看所有会话变量
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-uncommitted';
二、自定义变量
说明:变量是由用户自定义的
使用步骤:
声明
赋值
使用(查看、比较、运算等)
(一)用户变量
作用域:针对当前会话(连接)有效,同于【会话变量作用域】
赋值操作符支持:=和:=
使用步骤:
①声明并初始化
set @用户变量名=值;
set @用户变量名:=值;
select @用户变量名:=值;
②赋值(更新用户变量的值)
方式一:通过set或select
set @用户变量名=值;
set @用户变量名:=值;
select @用户变量名:=值;
方式二:通过select into
select 字段 into 变量名 from 表;
③使用(查看用户变量的值)
select @用户变量名;
(二)局部变量
作用域:仅仅在定义它的 begin end 中有效
使用步骤:
①声明
declare 变量名 类型;
declare 变量名 类型 default 默认值;
②赋值
方式一:通过set或select
set 局部变量名=值;
set 局部变量名:=值;
select @局部变量名:=值;
方式二:通过select into
select 字段 into 局部变量名 from 表;
③使用
select 局部变量名;
(三)用户变量和局部变量对比
作用域 | 定义和使用的位置 | 语法 | 类型 | |
---|---|---|---|---|
用户变量 | 当前会话 | 会话中任何地方 | 必须加 @ 符号 | 不用限定 |
局部变量 | begin end中 | 只能在 begin end 中,且为第一句话 | 一般不用加 @ 符号除非select @局部变量名:=值;这种写法 | 需要限定 |
(四)案例
# 声明两个变量并赋初始值,求和,并打印
############# 用户变量 #############
set @m := 1;
set @n := 2;
set @sum := @m + @n;
select @sum;