Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Assignment Operators

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

    您可以在其他语句中使用 := 运算符来赋值,例如 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 语句中执行多个赋值。

    SET 子句中 UPDATE 语句中,= 也作为赋值运算符;在这种情况下,它使左侧的列名采用右侧的值,前提是 UPDATE 语句中的任何 WHERE 条件都被满足。您可以在同一个 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 节,“子查询”