批量更新方法会造成mysql死锁吗
发布网友
发布时间:2022-04-23 04:17
我来回答
共1个回答
热心网友
时间:2022-04-08 07:58
这个代码,只要条件满足,肯定会死锁。
如果有2个线程同时做批量更新,
第一个线程更新了id=1的数据,
第二个线程更新了id=2的数据。
这个时候,第一个线程准备更新id=2的数据,但线程2所持连接未提交,无法取得数据库中该id=2的行锁。
同时第二个线程准备更新id=1的数据,也因为无法取得id=1的行锁,就造成了死锁。
解决办法的就是:如果更新条件的,比如说是主键,则根据主键排序之后批量做更新。
如果更新条件不是主键,可以那么单线程处理。
也可以通过单条语句执行来避免死锁。
不过,不使用批量性能太低了,你还是需要结合你的业务来调整代码避免死锁