变量
- 系统变量 = 全局变量 + 会话变量
- 自定义变量 = 用户变量 + 局部变量
系统变量
属于服务器层面,必须拥有 super 权限才能为系统变量赋值
- 全局变量作用域:服务器每次启动时,会初始化全局变量,对所有的会话(连接)都有效。这些初始值可以通过设置 my.ini 文件而更改
- 会话变量作用域:服务器每次建立一个新的连接时,会初始化会话变量,只对当前会话(连接)有效
- 操作会话变量 →
session
(默认) - 操作全局变量 →
global
展示所有的系统变量
show global|[session] variables;
展示满足条件的系统变量
show global|[session] variables like '%char%';
查看指定的系统变量
select @@global|[session].系统变量名; -- 这里是 @@
为指定的系统变量赋值
set global|[session] 系统变量名 = 值;
set @@global|[session].系统变量名 = 值; -- 这里是 @@
自定义变量
变量 | 作用域 | 定义&使用的位置 | 语法 |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须加 @ 符号,不用限定类型 |
局部变量 | begin and 中 | 只能在 begin end 中,且为第一句话 | 一般不用加 @ 符号,需要限定类型 |
用户变量
- 用户变量作用域:针对当前会话(连接)有效,可以应用在任何地方!
- 用户变量前面必须加 @
声明 & 初始化
set @用户变量名 = 值;
set @用户变量名 := 值;
select @用户变量名 := 值;
赋值
给单个变量赋值:
参考声明语句
给多个变量赋值:
select 字段 into @变量名1, @变量名2
from 表;
eg:将 employees 表的员工数赋值给变量 count
set @count = 1; -- 声明并初始化
select count(*) into @count -- 修改值
from employees;
查看
select @变量名;
局部变量
作用域:仅在定义它的 begin end
中有效
要应用在 begin end
中的第一句话!!!
声明
declare 变量名 类型 [default 初始值];
赋值
给单个变量赋值:
set 局部变量名 = 值;
set 局部变量名 := 值;
select @局部变量名 := 值; -- 只有 select 才需要 @
给多个变量赋值:
select 字段 into 局部变量名1, 局部变量名2
from 表;