文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  赋值运算符

14.4.4 赋值运算符

表 14.6 赋值运算符

名称 描述
:= 分配值
= 分配值(作为 SET 语句的一部分,或作为 UPDATE 语句中 SET 子句的一部分)

  • :=

    赋值运算符。使运算符左侧的用户变量获取右侧的值。右侧的值可以是字面值、存储值的另一个变量,或任何产生标量值的合法表达式,包括查询的结果(前提是该值为标量值)。您可以在同一个 SET 语句中执行多个赋值。您可以在同一个语句中执行多个赋值。

    = 不同,:= 运算符永远不会被解释为比较运算符。这意味着您可以在任何有效的 SQL 语句中使用 :=(而不仅仅是在 SET 语句中)来为变量赋值。

    mysql> SELECT @var1, @var2;
            -> NULL, NULL
    mysql> SELECT @var1 := 1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2 := @var1;
            -> 1, 1
    mysql> SELECT @var1, @var2;
            -> 1, 1
    
    mysql> SELECT @var1:=COUNT(*) FROM t1;
            -> 4
    mysql> SELECT @var1;
            -> 4

    除了 SELECT 之外,您还可以在其他语句中使用 := 进行赋值,例如 UPDATE,如下所示

    mysql> SELECT @var1;
            -> 4
    mysql> SELECT * FROM t1;
            -> 1, 3, 5, 7
    
    mysql> UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> SELECT @var1;
            -> 1
    mysql> SELECT * FROM t1;
            -> 2, 3, 5, 7

    虽然可以使用 := 运算符在单个 SQL 语句中设置和读取同一个变量的值,但建议不要这样做。第 11.4 节,“用户定义的变量” 解释了为什么应该避免这样做。

  • =

    此运算符用于在两种情况下执行赋值,将在接下来的两段中进行描述。

    SET 语句中,= 被视为赋值运算符,它使运算符左侧的用户变量获取右侧的值。(换句话说,当在 SET 语句中使用时,= 的处理方式与 := 相同。)右侧的值可以是字面值、存储值的另一个变量,或任何产生标量值的合法表达式,包括查询的结果(前提是该值为标量值)。您可以在同一个 SET 语句中执行多个赋值。

    UPDATE 语句的 SET 子句中,= 也充当赋值运算符;但在这种情况下,如果满足 UPDATE 中的任何 WHERE 条件,它会使运算符左侧命名的列假定右侧给定的值。您可以在 UPDATE 语句的同一个 SET 子句中进行多个赋值。

    在任何其他上下文中,= 都被视为 比较运算符

    mysql> SELECT @var1, @var2;
            -> NULL, NULL
    mysql> SELECT @var1 := 1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2;
            -> 1, NULL
    mysql> SELECT @var1, @var2 := @var1;
            -> 1, 1
    mysql> SELECT @var1, @var2;
            -> 1, 1

    有关更多信息,请参阅 第 15.7.6.1 节,“用于变量赋值的 SET 语法”第 15.2.17 节,“UPDATE 语句”第 15.2.15 节,“子查询”