携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情
前言
上篇我们学习了MySQL中的变量-系统变量。有兴趣的小伙伴可以阅读(# MySQL学习-变量-系统变量)。
下面我们学习MySQL中的变量-用户变量。
用户变量
分类
用户变量是用户自己定义的,作为MySQL编码规范,MySQL中的用户变量以一个“@”开头。根据作用范围不同,又分为会话用户变量和局部变量。
- 会话用户变量:作用域和会话变量一样,只对当前连接会话有效。
- 局部变量:只在BEGIN和END语句块中有效。局部变量只能在存储过程和函数中使用。
会话系统变量
定义
#方法一:“=”或“:=”
SET @用户变量 = 值;
SET @用户变量 := 值;
#方法二:":="或INTO关键字
SELECT @用户变量 := 表达式 [FROM 等子句];
SELECT 表达式 INTO @用户变量 [FROM 等子句];
查看用户变量
SELECT @用户变量
SET @a = 1;
SELECT @a;
SELECT @num := COUNT(*) FROM employees;
SELECT @num;
SELECT AVG(salary) INTO @avgsalary FROM employees;
SELECT @avgsalary;
SELECT @b;
最后的语句,查看一个未申明的变量时,会返回NULL值。
局部变量
- 可以使用DECLARE语句定义一个局部变量
- 仅仅在定义它的BEGIN...END中有效
- 只能放在BEGIN...END中,而且只能放在第一句
BEGIN
#声明局部变量
DECLARE 变量名1 变量数据类型 [DEFAULT 变量默认值];
DECLARE 变量名2, 变量名3,... 变量数据类型 [DEFAULT 变量默认值];
#为局部变量赋值
SET 变量名1 = 值;
SELECT 值 INTO 变量名2 [FROM 子句];
#查看局部变量的值
SELECT 变量1, 变量2, 变量3;
END
定义变量
DECLARE 变量名 变量数据类型 [DEFAULT 变量默认值];#如果没有DEFAULT子句,则初始值为NULL
DECLARE test INT DEFAULT 10;
变量赋值
- 方式一:一般用于赋简单的值。
SET 变量名 = 值;
SET 变量名 := 值;
- 方式二:一般用于赋表中的字段值。
SELECT 字段名或表达式 INTO 变量名 [FROM 表];
使用变量
SELECT 局部变量名;
举例
声明两个变量,求和。(分别使用会话用户变量,局部变量的方式实现)
方式一:使用会话用户变量
SET @m = 1;
SET @n = 1;
SET @sum = @m + @n;
SELECT @sum;
方式二:使用局部变量
DELIMITER //
CREATE PROCEDURE add_value()
BEGIN
DECLARE m INT DEFAULT 1;
DECLARE n INT DEFAULT 1;
DECLARE sum INT;
SET sum = m + n;
SELECT sum;
END //
DELIMITER ;
会话用户变量与局部变量区别
| 作用域 | 定义位置 | 语法 | |
|---|---|---|---|
| 会话用户变量 | 当前会话 | 会话的任何地方 | 加@符号,不用指定类型 |
| 局部变量 | 定义它的BEGIN END中 | BEGIN END的第一句话 | 一般不用加@,需要指定类型 |
今天先学习到这里,明天继续。