对于mysql中的批量更新,站在java程序员的角度而言,可以使用分条更新、或者用case when 这样的方式。
我就是使用的case when这样的方式。但是被提了一个bug,大体意思是这样
update a set tag=
case tag
when 1 then 11
end
where bId=12
嗯,有问题。
问题在于,bId是个逻辑外键,所以根据bId会查询出很多数据,比如查询出tag可以是[1,2,3]这个集合,但是2,3并不在上面的when情况中。这时候数据库就会将tag字段修改为null,此时tag字段如果做了not null的限制,就会报错。就会被提bug,呜呜呜~
那么解决方案的话,就是在where条件中加上tag in(),这样就不会超出范围了。或者在case语句中添加 else tag,代表如果没在范围内就不修改。可以根据情况自行选择。
好,就这些。