目录
1、系统变量
1.1 系统变量的分类
变量由系统定义,不是用户定义,属于 服务器 层面。启动MySQL服务,生成MySQL服务实例期间,MySQL将为MySQL服务器内存中的系统变量赋值,这些系统变量定义了当前MySQL服务实例的属性、特征。这些系统变量的值要么是 编译MySQL时参数 的默认值,要么是 配置文件 (例如my.ini等)中的参数值。
其中,系统变量分为 全局系统变量(Global 关键字) 和 会话系统变量(Session关键字);若不说明具体的关键字,则默认为 Session会话级别
如图所示:
- 假设 A 为全局系统变量, B为会话系统变量,中间的交集则为既是会话又是全局系统变量;
- 这时,若改动 B 中的变量,则不会对 A 产生影响;但是改动 A 中的变量则会对 B 产生影响
1.2 SQL 语句实现以及注意事项
SQL 语句实现:
SHOW GLOBAL VARIABLES #查询全局系统变量 632条记录
SHOW SESSION VARIABLES #查询会话系统变量 655条记录
SHOW VARIABLES #查询默认的系统变量(默认会话)655条记录
#查询指定的系统变量,变量名前面需要加上两个 @
SELECT @@global.max_connections #这里查询全局系统变量
#修改指定的系统变量值
SET @@session.tx_isolation='read-uncommitted';
注意事项 :
之前所修改的系统变量值只是在之前的 MySQL 实例中才生效;当前 MySQL 重连过后,之前的变量就又会恢复成原来的未被修改前的默认值
2、用户变量
2.1 用户变量的分类
用户变量是用户自己定义的,作为 MySQL 编码规范,MySQL 中的用户变量以 一个“@” 开头。根据作用 范围不同,又分为 会话用户变量 和 局部变量 。
- 会话用户变量:作用域和会话变量一样,只对 当前连接 会话实例有效。
- 局部变量:只在 BEGIN 和 END 语句块中有效。局部变量只能在 存储过程和函数 中使用。
2.2 会话用户变量的 SQL 语句实现
#变量的声明、赋值以及查询
set @user01 = 1 #方式一 “=”
SELECT @user01
set @user02 := 2 #方式二 “:=”
SELECT @user02
SELECT count(*) INTO @user03 FROM employees #方式三,使用 select 查询语句来声明用户变量
SELECT @user03
SELECT @user04; #查看某个未声明的变量时,将得到NULL值
2.3 局部变量的声明条件以及 SQL 语句实现
声明条件:
- 使用 DECLARE 声明
- 声明并使用在 BEGIN ..... END 中 (即使用在存储过程、函数中)
- DECLARE 的方式声明的局部变量必须声明在 BEGIN 中首行的位置
SQL 语句实现:
DELIMITER // #开始
CREATE PROCEDURE test_var() #创建存储过程
BEGIN
#1、声明局部变量
DECLARE a INT DEFAULT 0; #若未赋值,默认为0
DECLARE b INT ;
#DECLARE a,b INT DEFAULT 0;
DECLARE emp_name VARCHAR(25);
#2、赋值
SET a = 1;
SET b := 2;
SELECT last_name INTO emp_name FROM employees WHERE employee_id = 101;
#3、使用
SELECT a,b,emp_name;
END //
DELIMITER ; #结束
调用以上存储过程:
#调用存储过程
CALL test_var();