MySQL中的变量可以分为两类:
系统变量 和 自定义变量,接下来请看详细介绍
一、系统变量
——说明:系统变量由系统提供,不是用户定义,属于服务器层面
1.1 系统变量中又包含两类:
- 全局变量
- 作用域:服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启
- 会话变量
- 作用域:仅仅针对于当前会话(连接)有效
1.2 变量的查询
global:表示全局变量
session:表示会话变量
1.2.1 查看所有系统变量
SHOW GLOBAL VARIABLES;#查看所有的全局变量 SHOW SESSION VARIABLES;#查看所有的会话变量
1.2.2 查看满足条件的部分系统变量
SHOW GLOBAL VARIABLES LIKE '%char%';#查看所有包含char的全局变量 SHOW SESSION VARIABLES LIKE '%char%';#查看所有包含char的会话变量
1.2.3 查看指定的某个系统变量的值(一般查看具体的值,需要用select命令)
select @@global.系统变量名; select @@session.系统变量名; 例: select @@autocommit;//查看自动提交是否开启
1.2.4 为某个系统变量赋值
方式一:
set global 系统变量名 = 值; set session 系统变量名 = 值; 例: set session tx_isolation = 'read-uncommitted';#设置隔离级别
方式二:
set @@global.系统变量名 = 值; set @@session.系统变量名 = 值; 例: set @@session.tx_isolation = 'read-uncommitted';#设置隔离级别
注意(系统变量):
如果是全局级别,则需要加 global;
如果是会话级别,则需要加 session,如果不写则默认是 session 级别。
二、自定义变量
——说明:自定义变量是由用户自定义,不是由系统提供的
自定义变量中又包含两类:
用户变量(全局变量)
局部变量
1.1 用户变量(全局变量)
- 用户变量(全局变量)
- 作用域:针对于当前会话(连接)有效
- (可以应用在任何地方,begin end里面或者begin end外面.)
1.1.1 用户变量(全局变量)的声明并初始化
赋值的操作符为 =或:=
set @用户变量名 = 值; set @用户变量名 := 值; select @用户变量名 := 值;
1.1.2 赋值
方式一:(通过set或select)
set @用户变量名 = 值; set @用户变量名 := 值; select @用户变量名 := 值; 案例: set @name = 'json'; set @name = 100;
方式二:(通过select into)
select 字段 into @变量名 from 表; 案例: select count(*) into @name from employees;//查询员工表总人数
1.1.3 查询
select @变量名; 案例: select @count;//查询变量值
1.2 局部变量(仅能应用在begin end中的第一句话!!!)
- 局部变量
- 作用域:仅仅在定义它的begin end中有效
1.2.1 局部变量的声明并初始化
类似于java中的变量的声明,必须加上类型。可以只声明,不初始化
declare 变量名 类型; #声明 案例: declare name varchar(20); #------- declare 变量名 类型 default 值; #初始化一个值 案例: declare name varchar(20) default 'Tom';
1.2.2 赋值
方式一:(通过set或select)
set 局部变量名 = 值; set 局部变量名 := 值; select @局部变量名 := 值; 案例: set name = 'json'; set name = 100;
方式二:(通过select into)
select 字段 into 局部变量名 from 表; 案例: select count(*) into name from employees;//查询员工表总人数
1.2.3 查询
select 局部变量名; 案例: select count;//查询局部变量值
注意(自定义变量):
- 自定义变量中的 局部变量 仅能应用在 begin end 中的第一句话!!!
- 再次强调
对比
自定义变量中,用户变量和局部变量的 对比:
作用域 | 定义和使用的位置 | 语法 | |
---|---|---|---|
用户变量(全局变量) | 当前会话 | 会话中的任何地方 | 必须加@符号,不用限定类型 |
局部变量 | begin end中 | 只能在begin end中,且为第一句话 | 一般不用加@符号,必须限定类型 |