MySQL中:=和=有什么区别?

6
mysql> set @num := 1;
Query OK, 0 rows affected (0.00 sec)

mysql> set @num = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> select @num;
+------+
| @num |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

似乎两者都可以工作。
2个回答

4
简而言之,在使用SET时,它们都作为赋值运算符,但在任何非set语句中,:=用于赋值,=用于检查相等性。
对于SET,=或:=都可以用作赋值运算符。您还可以在非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 | 
+------+------+------+--------------------+

摘自MySQL 8.4 用户定义变量


这是一个有效的MySQL语句吗?你可以像那样定义变量吗? - Anthony Forloney
为了任何阅读这些评论的人,它并没有被弃用。感谢@AnthonyForloney传播基础知识。这就是我喜欢stackoverflow的原因。 - But those new buttons though..
@billynoah 不用谢!感谢你澄清语法是否已被弃用。 - Anthony Forloney

2

两者都是赋值运算符。

:= 被创建出来是为了更清晰,因为在 SQL 中 = 也是一个等价运算符。例如:WHERE x = 1; (大多数计算机语言中是 ==


这让人不禁想问,为什么他们不像其他人一样使用===呢? - But those new buttons though..

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