Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Assignment Operators

14.4.4 赋值运算符

表 14.6 赋值运算符

Name Description
:= 赋值
= 赋值(作为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 语句中执行多个赋值操作。

    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节,“子查询”