此更新声明如何工作?

时间:2013-03-15 21:12:57

标签: mysql sql

我今天有一个同事写了一个不正确编写的SQL更新。

UPDATE table SET column  = 'change'
WHERE id = 2401 OR 2402 OR 2403 OR 2404 OR 2405 OR 2406;


Query OK, 264 rows affected (0.03 sec)
Rows matched: 9997 Changed: 264  Warnings: 0

为什么会这样?

我认为它最多会更新1行,ID是唯一的。和2402和2403 ....等没有匹配任何东西。

2 个答案:

答案 0 :(得分:8)

发生的事情OR 2402被视为真值,就好像你把1 = 1或其他条件总是返回true一样。您的查询被MySQL读取为

UPDATE table SET column  = 'change'
WHERE id = 2401 OR true OR true OR true OR true OR true;

答案 1 :(得分:2)

该陈述是错误的,会更新您的所有记录。该 正确的查询是:

UPDATE table 
SET column  = 'change'
WHERE id = 2401 OR id= 2402 OR id=2403 OR id=2404 OR id=2405 OR id=2406;

或更好:

UPDATE table 
SET column  = 'change'
WHERE id IN (2401,2402,2403,2404,2405,2406);

您的原始查询更新记录,其ID为2401,并且任何其他行保留2042为“true”,它适用于所有人(因为2042不是0或false)

相关问题