set test_var = 20;
和
set test_var:=20;
,因为它们似乎都赋值 ?
这或多或少是语法糖
看这里
最重要的区别是
与=不同,:=操作符永远不会被解释为比较操作操作符。这意味着您可以在任何有效的SQL语句中使用:=(仅在SET语句中)将值赋给变量。
它们都是赋值运算符,但我可以发现它们的区别是=
可以用来执行布尔运算,而:=
不能。
valid: 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 |
+------+------+------+--------------------+
只能在赋值时使用:=,而不能在比较时使用。这只是一点语法糖,它根本不会改变功能。您将在代码生成的SQL中看到很多。
在SET
和SELECT
语句中使用:=
被解释为赋值。
在SET
语句中使用=
被解释为赋值。
在SELECT
语句中使用=
被解释为bool操作符(比较)。
所以如果你指的是赋值,使用:=