两者有什么区别
set test_var = 20;
和
set test_var:=20;
因为他们似乎都在分配价值?
两者有什么区别
set test_var = 20;
和
set test_var:=20;
因为他们似乎都在分配价值?
它或多或少是语法糖。
看看这里
最重要的区别是
与 = 不同,:= 运算符永远不会被解释为比较运算符。这意味着您可以在任何有效的 SQL 语句(不仅仅是在 SET 语句中)中使用 := 来为变量赋值。
它们都是赋值运算符,但我可以发现它们的区别之一是=
可以用于执行布尔运算,而:=
不能。
有效:SUM(val = 0)
无效:SUM(val := 0)
还有一件事,您还可以在 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 |
+------+------+------+--------------------+
您只能使用 := 进行分配 - 从不进行比较。它只是一点语法糖,根本没有真正改变功能。您会在从代码生成的 SQL 中看到很多。
:=
在SET
andSELECT
语句中使用被解释为赋值。
=
在SET
语句中使用被解释为赋值。
但是,=
在SELECT
语句中使用被解释为布尔运算符(比较)。
因此,如果您的意思是分配,则始终可以安全使用:=