系统变量 分类
全局系统变量需要添加 global 关键字,有时把全局系统变量简称 全局变量
会话系统变量需要添加 session 关键字,有时也把会话系统变量称为 local 变量 局部变量
如果不写(global、session)默认会话级别。
静态变量在mysql服务实例运行期间他们的值不能使用set 动态修改,属于特殊的全局系统变量
查看系统变量
## 查看所有全局变量
show global variables;
## 查看所有会话变量
show session variables;
# 或 没指定global 、session 默认是 session
show variables;
# 查看满足条件的部分系统变量
# show global variables like ’%b标识符%‘
show global variables like ’character%‘
# 查看满足条件的部分会话变量
show session variables like '%标识符%'
查看指定系统变量
sql server 和 mySQL 系统变量以“@@”开头的,
“@@global ”仅用于标记全局系统变量
“@@session“ 仅用于标记会话系统变量
“@@“ 首先标记会话系统变量,如果会话系统变量不存在,则标记全局系统变量
# 查看指定的系统变量的值
select @@global.变量名;
# 查看指定的会话变量的值
select @@session.变量名
# 或
select @@变量名
修改系统变量的值
有些时候,数据库管理员需要修改系统变量的默认值,以便修改当前会话或者Mysql服务实例的属性、特征
修改方式如下:
方式1:
修改Mysql.ini 配置文件,继而修改mysql系统变量的值(该方便需要重新MySQL服务 才能生效)
方式2:
在mySQL 服务运行期间,使用 set 命令 重新设置系统
# 为某个系统变量赋值
# 方式1
set @@global.变量名=变量值;
# 方式2
set global 变量名=变量值;
## 全局变量 针对当前数据库实例是有效的,一旦重启mysql服务, 就生效了,会加载my.ini 配置的变量
# 为某个会话变量赋值
# 方式1
set @@session.变量名=变量值;
#方式2
set session 变量名=变量值
## local变量 针对当前会话有效,其它会话是无效的,
用户变量
用户自己定义的变量,就是用户变量, 是一个“@”开头。
根据范围分:
- 会话用户变量 : 作用域和会话变量一样,只对当前 会话有效(当前连接)
- 局部变量 :只在begin 和 end 语句块中有效。局部变量只能在 存储过程和函数中使用
会话用户变量
一、变量的定义
# 方式1 “=” 或 “:=”
set @变量名 = 值;
set @变量名 := 值
# 方式2 “:=” 或 INTO 关键字
select @变量名 := 表达式 [ from 等子句]
select 表达式 into @变量名 [ from 等子句]
select @size=100;
select 100 into @size;
select @cnt := count(*) from students ;
select count(*) into @cnt from students;
二、查看用户变量的值 (查看、比较、运算等)
select @变量名
select @cnt=1
select @cnt
局部变量
定义: 可以使用 declare 语句定义 一个局部变量
作用域: 仅仅在定义它的 begin 。。。end 中有效
位置: 只能放在 begin。。。。end ,而且只能放在第一句
一、定义变量
declare 变量名 类型 [defaut 值]; —如果没有指定default 子句,初始值为 null
declare my_1 int default 100
二、变量赋值
# 方式1 一般用于赋简单的值
set 变量名=值;
set 变量名:=值;
# 方式2 一般用于赋表中的字段值
select 字段名或表达式 into 变量名 from 子句;
三、使用变量 (查看、比较、运算等)
select 局部变量名
会话用户变量 VS 局部变量
mysql 8.0 全局变量的持久性
5.7 全局变量 mysql 服务重启,就重置了(变成 my.ini 里的设定的值啦)
在mysql数据库中,
set @@global.变量= xxx ; 或 set global 变量=xx;
但这种设置变量,只有mysql服务重启,就失效啦。
mysql 8.0
新增了 set persist 命令,持久性生效
set persist global 变量 =xxx;set persist @@global.变量= xxx ;
mysql 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,覆盖默认的配置文件