文章目录

  • 1 变量的概念
  • 2 系统变量
  • 2.1 变量的查看
  • 2.2 变量的修改
  • 3 用户自定义变量
  • 3.1 概念
  • 3.2 会话用户变量
  • 3.3 局部变量
  • 3.3.1 注意点
  • 3.3.2 声明格式
  • 3.3.3 代码演示


1 变量的概念

在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。
在MySQL数据库中,变量分为系统变量(全局系统变量与会话系统变量)以及用户自定义变量

2 系统变量

2.1 变量的查看

#查看系统变量
SHOW GLOBAL VARIABLES;#全局系统变量
SHOW SESSION VARIABLES;#会话系统变量
SHOW VARIABLES;# 默认查询会话系统变量

#查看部分系统变量
SHOW GLOBAL VARIABLES LIKE 'admin_%';
SHOW VARIABLES LIKE 'character_%';

#查看指定的全局系统变量
SELECT @@global.max_connections;
#查看指定的会话系统变量
 @@session.character_set_client;
#@@+变量名,会先去会话系统变量中找,找不到再去局系统变量找
SELECT @@max_connections;

2.2 变量的修改

#修改系统变量
#全局系统变量:对于当前数据库实例是有效的,一旦重启mysql服务就失效了
#方式一:
SET @@global.max_connections = 152;
#方式二:
SET GLOBAL max_connections = 161;

#会话系统变量:只针对当前会话有效,关闭会话会失效
SET @@session.character_set_client = 'gbk';
SET SESSION character_set_client = 'utf8';

3 用户自定义变量

3.1 概念

用户变量是用户自己定义的,作为MySQL编码规范,MySQL中的用户变量以一个“@”开头。根据作用范围不同,又分为会话用户变量局部变量

  • 会话用户变量:作用域和会话变量一样,只对当前连接会话有效。
  • 局部变量:只在BEGIN和END语句块中有效。局部变量只能在存储过程和函数中使用。

3.2 会话用户变量

#用户自定义变量(会话期间有效)
#方式一
SET @m1 = 1;
SET @m2 := 2;#=与:=作用一致
SET @sum = @m1 + @m2; 
SELECT @sum; #查看变量内容

#方式二
SELECT @count := COUNT(*) FROM employees;
SELECT @count;

#方式三
SELECT AVG(salary) INTO @avg_salary FROM employees;
SELECT @avg_salary;

3.3 局部变量

3.3.1 注意点

  • 必须使用declare声明
  • 声明并使用在begin…end中(存储过程或函数中)
  • declare声明的局部变量必须声明在begin的首行位置

3.3.2 声明格式

DECLARE 变量名 类型 [default值];#如果没有DEFAULT子句,初始值为NULL

3.3.3 代码演示

#局部变量
CREATE PROCEDURE test_var () 
BEGIN
#定义局部变量(必须在begin的首行)
	DECLARE
		a INT DEFAULT 0;
	DECLARE
		b INT;
	DECLARE
		d,
		c INT DEFAULT 0;
	DECLARE
		emp_name VARCHAR ( 25 );
		
	#赋值
	SET a = 1;
	SET b = 2;
	SET d = 3;
	SET c = 4;
	SELECT
		last_name INTO emp_name 
	FROM
		employees 
	WHERE
		employee_id = 101;
	
	# 使用
	SELECT
		a,
		b,
		c,
		d,
		emp_name;	
END;