Documentation Home
MySQL 8.0 参考手册  / 第 12 章函数和运算符  / 12.4 运营商  /  12.4.4 赋值运算符

12.4.4 赋值运算符

表 12.6 赋值运算符

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

  • :=

    赋值运算符。使运算符左侧的用户变量取其右侧的值。右侧的值可以是文字值、存储值的另一个变量或产生标量值的任何合法表达式,包括查询结果(前提是该值是标量值)。您可以在同一 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

    :=除了 ,您还可以使用 in 其他语句 进行赋值 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 语句中设置和读取同一变量的值,但不建议这样做。 第 9.4 节,“用户定义的变量”,解释了为什么你应该避免这样做。

  • =

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

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

    在语句的SET子句中 UPDATE=也充当赋值运算符;然而,在这种情况下,它会导致在运算符左侧命名的列采用右侧给定的值,前提是满足WHERE属于 的任何条件UPDATE。您可以在语句的同一 SET子句中 进行多项赋值UPDATE

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

    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

    有关详细信息,请参阅第 13.7.6.1 节,“变量赋值的 SET 语法”第 13.2.13 节,“UPDATE 语句”第 13.2.11 节,“子查询”