变量的类别:
- 系统变量:全局变量、会话变量。(作用域:是所有的连接,当关闭服务再重启时,之前的设置将失效)
- 自定义变量:用户变量、局部变量(作用域:仅仅针对当前会话连接有效)
一、系统变量
- 系统变量如果是全局的则加 global,如果是会话级则加session,如果省略则表示会话级
1、查询系统变量
# 查询所有的全局变量
show global variables;
# 查看所有会话变量,session 可以省略
show [session] variavles;
# 查看满足条件的部分系统变量,如所有的字符集
SHOW VARIABLES LIKE '%char%';
# 查看某个指定的系统变量的值,查看指定的用select来查
SELECT @@系统变量名
# 查看指定的全局变量值,会话变量值时session可以省略
select @@global.系统变量名;
2、为某个系统变量赋值
方法一:
# 为某个全局系统变量赋值
set global 系统变量名=值;
# 为某个会话系统变量赋值
set [session] 系统变量名=值;
方法二:
set @@global.系统变量名=值; # 全局系统变量赋值
set @@session.系统变量名=值; # 会话系统变量赋值
二、自定义变量
1、用户变量:
- 作用域:针对当前会话连接有效,等同于会话变量的作用域
(1)、声明并初始化:
# 语法:
set @用户变量名=值; # 方式1
set @用户变量名:=值; # 方式2
select @用户变量名:=值 # 方式3
(2)、为变量赋值
set @用户变量名=值; # 方式1
set @用户变量名:=值; # 方式2
select @用户变量名:=值 # 方式3
select 字段 into 变量名 from 表; # 方式4,相当于将字段的值赋给变量
2、局部变量
- 作用域:仅仅在定义它的 begin end 中有效(只能在 begin end 块中)
- 必须应用在 begin end 的第一句话
(1)、声明
declare 变量名 类型;
declare 变量名 类型 default 值;
(2)、赋值
方法1:
set 局部变量名=值; # 方式1
set 局部变量名:=值; # 方式2
select @局部变量名:=值; #方式3
方法2:
select 字段 into 变量名 from 表; # 方式4,相当于将字段的值赋给变量
(3)、打印
select 局部变量名;
三、应用实例
1、声明两个变量并赋初始值,求和,并打印:
# 定义用户变量,在使用过程中变量前要加@符号
SET @m=1;
SET @n=2;
SET @sum=@m+@n;
SELECT @sum;