赋值运算符
分配运算符
名称 | 描述 |
---|---|
:= | 赋值 |
= | 分配值(作为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您可以
:=
在之外的其他语句中使用进行值分配SELECT
,例如UPDATE
,如下所示:mysql>
SELECT @var1; -> 4 mysql>SELECT *FROM t1; -> 1, 3, 5, 7 mysql>UPDATE t1SET c1 = 2WHERE 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语句中设置和读取同一变量的值,但是不建议这样做。“用户定义的变量”解释了为什么应避免这样做。=
该操作符用于在两种情况下执行值分配,以下两段将进行介绍。
在一条
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有关更多信息,请参见“变量分配的SET语法”,“ UPDATE语句”和“子查询”。