MySQL 8.4 Release Notes
14.4.4 赋值运算符
-
赋值运算符。将左侧的用户变量设置为右侧的值。右侧的值可以是一个字面值、另一个存储值的变量或任何合法的表达式,包括查询结果(假设该值是标量值)。您可以在同一个
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节,“子查询”。