此更新声明如何工作?

Hal*_*arr 1 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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

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

Mat*_*che 8

发生的事情OR 2402被视为一个真正的价值,就好像你提出1 = 1或另一个总是返回真实的条件.您的查询被MySQL读取为

UPDATE table SET column  = 'change'
WHERE id = 2401 OR true OR true OR true OR true OR true;
Run Code Online (Sandbox Code Playgroud)