文章目录
- 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;