mysql - mysql中运行查询的奇怪行为
问题描述
我的意图是在 mysql 中运行这个查询:
update my_users set isLocked=1 where categoryId=10;
但我不小心输入了破折号 (-) 而不是等号 (=)。所以查询看起来像这样:
update my_users set isLocked=1 where categoryId-10;
这会产生问题,因为它为所有人运行,而不仅仅是属于类别 10 想知道为什么第二次调用不会产生任何错误并阻止执行?
解决方案
是的 。. . 你有一个算术表达式,它被解释为:
categoryId - 10 <> 0
所以,它不会更新所有行——只是所有categoryId
不是 10 的行。
哎呀。这是 MySQL 通过将布尔值视为可与整数互换来帮助您的结果,其中0
false 和所有其他值都为 true。
您可能可以使用sql_safe_updates
mode来防止这种情况。但是,我不确定该模式是否真的检查您是否对键进行了显式比较。
推荐阅读
- ms-access - Microsoft Access 查询语法访问(在 IN 子句中使用 IN 子句)
- javascript - 我可以在 React 应用程序中使用 Amazon Comprehend 吗?
- firebase - 在 Firebase 和 Hostgator 之间共享域
- python - 在 python 3 中将字符串转换为 int 时,Try/except 语句未捕获 ValueError
- c# - 通过脚本更改 PostProcessing 绽放效果
- r - 在闪亮的仪表板中调整仪表板中标题栏的宽度
- java - 无法弄清楚在数组中使用循环
- linux - 让 bash 脚本在另一个 bash 脚本中输出一个字符串
- arrays - 集合而不是 Postgres 中的数组
- python-2.7 - 检查Python中的外部文件是否存在函数