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 = 值;

自定义变量

顾名思义,自定义变量是由用户自行定义的,分为用户变量和局部变量。

同高级语言类似,其操作主要有声明、赋值、使用。

用户变量

用户变量旨在当前会话连接有效,类似会话变量的作用域。

基本操作

  1. 声明并初始化
#方式一
set @用户变量名=值;
#方式二 加冒号为了区别等号
set @用户变量名:=值;
# 方式三
select @用户变量名:=值;
  1. 赋值(更新用户变量值)
# 方式一 同声明方式一致,即使用set或select重新声明。
set @用户变量名=值;
set @用户变量名:=值;
select @用户变量名:=值;

# 方式二  这种方式把业务数据写入到公共数据,可共享数据。
select  字段 
into  @用户变量名
from 表名字;
  1. 使用(查看用户变量的值)
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语句快的第一句话。这不同于用户变量的作用域在当前会话,且可在会话的任何地方定义和使用。

基本操作

同用户变量类似,局部变量的操作也包括三项内容。

  1. 声明和初始化
declare 变量名 类型 [default  值]
  1. 赋值
# 方式一 同声明方式一致,即使用set或select重新声明。
set @局部变量名=值;
set @局部变量名:=值;
select @局部变量名:=值;

# 方式二  这种方式把业务数据写入到公共数据,可共享数据。
select  字段 
into  @局部变量名
from 表名字;
  1. 使用
select 局部变量名;