MySQL 中的系统变量和用户变量

目录

1、系统变量

1.1 系统变量的分类

1.2 SQL 语句实现以及注意事项

2、用户变量

2.1 用户变量的分类

2.2 会话用户变量的 SQL 语句实现

2.3 局部变量的声明条件以及 SQL 语句实现


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 语句实现

声明条件:

  1. 使用 DECLARE 声明
  2. 声明并使用在 BEGIN .....  END 中  (即使用在存储过程、函数中)
  3. 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();

猜你喜欢

转载自blog.csdn.net/qq_66862911/article/details/130894917