来看热闹,今天他妹撞鬼了,Mysql批量删除居然。

MySql 码拜 9年前 (2016-02-03) 841次浏览
DELETE  FROM `zt_comment` WHERE `cid` IN(“37,36,35,34,33,32,31,30,29,28,27,26”)
给这么句话你以为会删除CID为37,36,35,34,33,32,31,30,29,28,27,26的记录?你错了,它只删除了CID为37的记录。
可能本人是小白吧,这句话都看不懂
来个高手给解释一下
来看热闹,今天他妹撞鬼了,Mysql批量删除居然。
解决方案

20

“37,36,35,34,33,32,31,30,29,28,27,26”
这仅仅是一个字符串。  36 != “37,36,35,34,33,32,31,30,29,28,27,26”
把单引号去掉再试。

5

很明显的低级错误 “” 里面的表示是一个值,而不是一个值列表
能够出来一条数据,说明你的cid是数字类型,所以导致了字符串的数据类型转换,转换的结果是37,所以37 的记录满足条件
你可以本人测试一下
select cast(“37,36,35,34,33,32,31,30,29,28,27,26” as signed);

5

mysql 的执行计划显示(explain)很粗糙,不知道有没有更详细的
假如是在 sql server 中显示执行执行,可以很容易看到数据类型转换操作

5

引用 1 楼 ACMAIN_CHM 的回复:

“37,36,35,34,33,32,31,30,29,28,27,26”
这仅仅是一个字符串。  36 != “37,36,35,34,33,32,31,30,29,28,27,26”
把单引号去掉再试。

太有理了,这个仅是字符串而已。你的cid是什么类型,假如是整数,in后面的内容为什么要加单引号呢?低级错误,程序是死的,不会骗人!

5

是的,去掉单引号

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明来看热闹,今天他妹撞鬼了,Mysql批量删除居然。
喜欢 (0)
[1034331897@qq.com]
分享 (0)