mysql - 这个更新声明是如何工作的?

标签 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 ....等等不匹配任何东西。

最佳答案

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

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

关于mysql - 这个更新声明是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15442177/

相关文章:

mysql - 将简单的正则表达式模式应用于 SQL 查询

php - 查询后合并行

sql - 相当于 SQL Server INSERTED 和 DELETED 表的 Oracle

mysql - 为多对多关系插入多个值时如何避免重复 - mysql

关于选择特定行数的 SQL 查询查询

sql - 多列约束是为每一列创建索引还是统一索引?

mysql - 查找平均值的 SQL 查询

mysql - 缓慢的 MySQL 更新/插入/删除

php - 使用准备好的语句和存储过程获取 InsertId?

mysql - 如何在 UNION 中使用 ORDER BY