首页 > 解决方案 > mysql中运行查询的奇怪行为

问题描述

我的意图是在 mysql 中运行这个查询:

update my_users set isLocked=1 where categoryId=10;

但我不小心输入了破折号 (-) 而不是等号 (=)。所以查询看起来像这样:

update my_users set isLocked=1 where categoryId-10;

这会产生问题,因为它为所有人运行,而不仅仅是属于类别 10 想知道为什么第二次调用不会产生任何错误并阻止执行?

标签: mysqlsql

解决方案


是的 。. . 你有一个算术表达式,它被解释为:

categoryId - 10 <> 0

所以,它不会更新所有行——只是所有categoryId不是 10 的行。

哎呀。这是 MySQL 通过将布尔值视为可与整数互换来帮助您的结果,其中0false 和所有其他值都为 true。

可能可以使用sql_safe_updatesmode来防止这种情况。但是,我不确定该模式是否真的检查您是否对键进行了显式比较。


推荐阅读