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