关于mysql的批量更新

关于mysql的批量更新,第1张

mysql数据批量更新

update a set b=1 where id in ($ids) and id !=$_GET['id']

update a set b=0 where id not in ($ids) and id !=$_GET['id']

这个代码,只要条件满足,肯定会死锁

如果有2个线程同时做批量更新,

第一个线程更新了id=1的数据,

第二个线程更新了id=2的数据。

这个时候,第一个线程准备更新id=2的数据,但线程2所持连接未提交,无法取得数据库中该id=2的行锁。

同时第二个线程准备更新id=1的数据,也因为无法取得id=1的行锁,就造成了死锁。

解决办法的就是:如果更新条件的,比如说是主键,则根据主键排序之后批量做更新。

如果更新条件不是主键,可以那么单线程处理。

也可以通过单条语句执行来避免死锁。

不过,不使用批量性能太低了,你还是需要结合你的业务来调整代码避免死锁


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7240704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存