mysql的变量分为系统变量和自定义变量。其中,系统变量包括全局变量和会话变量,自定义变量包括用户变量和局部变量。
系统变量
系统变量由系统提供,用户不能定义,属于服务器层面,分为全局变量、会话变量,两者主要是作用域的不同。
服务器每次启动会根据配置文件为所有的全局变量赋初始值,且针对所有会话连接有效。但要注意,某次启动之后修改了某个全局变量的初始值,重启服务之后,该全局变量仍会恢复到初始值,即全局变量不能跨重启有效。
会话变量的作用域只在当前会话上下文。
基本操作
在执行系统变量相关操作时,会使用global和session两个关键字。
一般全局变量使用global关键字,会话变量使用session关键字。
默认情况操作的会话变量。
- 查看所有的系统变量
show [global|session] variables;
- 查看满足条件的部分系统变量
show [global|session] variables like '%xxx%'
- 查看指定的某一个系统变量的值
该命令使用select关键字,且当指明是全局或会话时有一个点好。
select @@[global|session.]var_name
- 为某个系统变量赋值
# 方式一
set [global|session] var_name = 值;
# 方式二
set [global|session] var_name = 值;
自定义变量
顾名思义,自定义变量是由用户自行定义的,分为用户变量和局部变量。
同高级语言类似,其操作主要有声明、赋值、使用。
用户变量
用户变量旨在当前会话连接有效,类似会话变量的作用域。
基本操作
- 声明并初始化
#方式一
set @用户变量名=值;
#方式二 加冒号为了区别等号
set @用户变量名:=值;
# 方式三
select @用户变量名:=值;
- 赋值(更新用户变量值)
# 方式一 同声明方式一致,即使用set或select重新声明。
set @用户变量名=值;
set @用户变量名:=值;
select @用户变量名:=值;
# 方式二 这种方式把业务数据写入到公共数据,可共享数据。
select 字段
into @用户变量名
from 表名字;
- 使用(查看用户变量的值)
select @变量名
使用测试
# 声明并初始化
SET @te:=123
#查看
SELECT @test; //123
# 赋值并查看
SET @test:=456
SELECT @test; //456
#赋值并查看
SELECT COUNT(*) INTO @test FROM jobs
SELECT @test //19
局部变量
局部变量只在定义它的begin end语句块(存储过程相关内容)内部有效,且应用是只能在begin end语句快的第一句话。这不同于用户变量的作用域在当前会话,且可在会话的任何地方定义和使用。
基本操作
同用户变量类似,局部变量的操作也包括三项内容。
- 声明和初始化
declare 变量名 类型 [default 值]
- 赋值
# 方式一 同声明方式一致,即使用set或select重新声明。
set @局部变量名=值;
set @局部变量名:=值;
select @局部变量名:=值;
# 方式二 这种方式把业务数据写入到公共数据,可共享数据。
select 字段
into @局部变量名
from 表名字;
- 使用
select 局部变量名;