19

两者有什么区别

set test_var = 20;

set test_var:=20;

因为他们似乎都在分配价值

4

4 回答 4

16

它或多或少是语法糖。

看看这里

最重要的区别是

与 = 不同,:= 运算符永远不会被解释为比较运算符。这意味着您可以在任何有效的 SQL 语句(不仅仅是在 SET 语句中)中使用 := 来为变量赋值。

于 2013-03-25T11:49:14.643 回答
16

它们都是赋值运算符,但我可以发现它们的区别之一是=可以用于执行布尔运算,而:=不能。

有效:SUM(val = 0)
无效:SUM(val := 0)

FROM 用户定义的变量

还有一件事,您还可以在 SET 以外的语句中为用户变量赋值。在这种情况下,赋值运算符必须是 := 而不是 =,因为后者在非 SET 语句中被视为比较运算符 =。

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 | 
+------+------+------+--------------------+
于 2013-03-25T11:50:47.133 回答
3

您只能使用 := 进行分配 - 从不进行比较。它只是一点语法糖,根本没有真正改变功能。您会在从代码生成的 SQL 中看到很多。

于 2013-03-25T11:51:32.300 回答
0

:=SETandSELECT语句中使用被解释为赋值。

=SET语句中使用被解释为赋值。

但是,=SELECT语句中使用被解释为布尔运算符(比较)。

因此,如果您的意思是分配,则始终可以安全使用:=

于 2022-01-09T16:13:37.703 回答