我今天有一个同事写了一个不正确编写的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 ....等没有匹配任何东西。
答案 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)