MySQL学习-变量-用户变量

826 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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值。

局部变量

  1. 可以使用DECLARE语句定义一个局部变量
  2. 仅仅在定义它的BEGIN...END中有效
  3. 只能放在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的第一句话一般不用加@,需要指定类型

今天先学习到这里,明天继续。