赋值运算符
分配运算符
| 名称 | 描述 |
|---|---|
:= | 赋值 |
= | 分配值(作为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语句”和“子查询”。
