MySQL中=和:=的区别是什么?

24

有什么区别在于

set test_var = 20;

set test_var:=20;

因为它们似乎都试图分配值?

4个回答

18

这更多或少是语法糖。

在这里看一下

最重要的区别是

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


17

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

有效: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 | 
+------+------+------+--------------------+

3

在赋值时,你只能使用:=,而不能用于比较。这只是一点点语法糖,实际上并不会改变功能。在从代码生成的SQL中,你会经常看到它。


1
哎呀,大家都比我快。哈哈。 - antinescience

1
在使用SETSELECT语句时,使用:=被解释为赋值操作。而在SET语句中使用=同样被解释为赋值操作。但是,在SELECT语句中使用=则被解释为布尔运算符(比较)。因此,如果您想表达赋值操作,最好始终使用:=。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接