这种MySQL语法无效但有效

时间:2014-03-03 21:36:03

标签: mysql syntax

根据MySQL 5.5 documentation,UPDATE的有效语法如下:

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]

在我们的代码中,我们找到了此请求:

UPDATE eMail SET Actif = 0 AND FKClient = 122;

表格是MySQL 5.5上的Innodb,Actif是tinyint(1)可以为空。

据我所知,此语法无效且不应执行,因为AND语句中不允许进行SET比较。

如果您执行代码,则所有eMail行都将设置为Actif = 0

为什么我的UPDATE请求有效?

1 个答案:

答案 0 :(得分:4)

当然可以。它被解析为:

UPDATE eMAIL SET Active = (0 AND FKCLient = 122)

FKClient= 122将是一个布尔比较,返回true / false,因此它变为

UPDATE eMAIL SET Active = (0 AND bool)

0 AND anything0,所以......

... SET Active = 0