【第二十部分】系统变量和用户变量

【第二十部分】系统变量和用户变量



20. 系统变量和用户变量

20.1 系统变量

系统变量分为全局系统变量会话系统变量

在这里插入图片描述

全局系统变量: 针对所有的会话连接有效,如果重启MySQL服务器则会失效

会话系统变量: 针对于当前会话连接有效,关闭当前会话即失效; 在会话期间, 当前会话对某个会话系统变量值的修改,不会影响其他会话同一个会话系统变量的值, 但是如果会话对某个全局系统变量修改,那么会导致其他会话中同一个全局系统变量值的修改

在MySQL中,系统变量有的是全局,有的是会话,有的既可以是会话也可以是全局,就像一个交集.


查看系统变量

# 查看所有全局变量
SHOW GLOBAL VARIABLES;

# 查看所有会话变量
SHOW SESSION VARIABLES;

# 查看满足条件的部分系统变量。
SHOW GLOBAL VARIABLES LIKE '%xxx%';

# 查看满足条件的部分会话变量
SHOW SESSION VARIABLES LIKE '%xxx%';

查看指定的系统变量

# 系统变量以两个@@开头
# 查看指定的系统变量的值
SELECT @@global.变量名;

# 查看指定的会话变量的值
SELECT @@session.变量名;

修改系统变量值

#为某个系统变量赋值
#方式1:
SET @@global.变量名=变量值;
#方式2:
SET GLOBAL 变量名=变量值;


#为某个会话变量赋值
#方式1:
SET @@session.变量名=变量值;
#方式2:
SET SESSION 变量名=变量值;

20.2 用户变量

MySQL 中的用户变量以一个“@”开头。根据作用范围不同,又分为会话用户变量局部变量

会话用户变量: 也是只针对当前的会话,即会话关闭即失效

局部变量: 只能使用在存储函数存储过程中,也就是BEGIN和END语句块中有效

会话用户变量的定义

#方式1:“=”或“:=”
SET @用户变量 =;
SET @用户变量 :=;

#方式2:“:=” 或 INTO关键字
SELECT @用户变量 := 表达式 [FROM 等子句];
SELECT 表达式 INTO @用户变量  [FROM 等子句];

使用会话用户变量

# 示例一
SET @a = 1;
SET @b := 2;
SET @total = @a + @b;
SELECT @total

# 示例二
# 这里注意要用 := 不然赋值不了
SELECT @num := COUNT(*) 
FROM employees

SET @num2 = 0
SELECT COUNT(*) INTO @num2
FROM employees
SELECT @num2

局部变量的定义

# DECLARE去定义一个局部变量,并且需要放在第一句
BEGIN
	#声明局部变量
	DECLARE 变量名1 变量数据类型 [DEFAULT 变量默认值];
	DECLARE 变量名2,变量名3,... 变量数据类型 [DEFAULT 变量默认值];

	#为局部变量赋值
	SET 变量名1 =;
	SELECTINTO 变量名2 [FROM 子句];

	#查看局部变量的值
	SELECT 变量1,变量2,变量3;
END

局部变量的使用

# 创建存储过程“different_salary”查询某员工和他领导的薪资差距,并用IN参数emp_id接收员工id,用OUT参数dif_salary输出薪资差距结果

# 注意加; 否则报错
DELIMITER //
CREATE PROCEDURE different_salary(IN emp_id INT,OUT dif_salary DOUBLE(8,2))
BEGIN
	# 声明局部变量
	DECLARE emp_sal DOUBLE(8,2) DEFAULT 0.0 ;
	DECLARE mrg_sal DOUBLE(8,2) DEFAULT 0.0 ;
	
	SELECT salary INTO emp_sal
	FROM employees
	WHERE employee_id = emp_id;
	
	SELECT salary INTO mrg_sal
	FROM employees
	WHERE employee_id = (
		SELECT manager_id 
		FROM employees
		WHERE employee_id = emp_id
	);
	SET dif_salary = mrg_sal - emp_sal;
END //
DELIMITER;

SET @emp_id = 105
CALL different_salary(@emp_id,@dif_salary)
SELECT @dif_salary

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值