为了账号安全,请及时绑定邮箱和手机立即绑定

mysql 并发修改问题,批量修改问题,可能产生死锁问题万分感谢

mysql 并发修改问题,批量修改问题,可能产生死锁问题万分感谢

慕村9548890 2019-06-19 09:49:47
问题描述需要批量更新一个字段值,updatetablesetxxx=xxx+awherea=?andb=?ab有索引,还有另外一个主键索引会有并发的情况,可以不考虑事务回滚相关代码//请把代码文本粘贴到下方(请勿用图片代替代码)publicvoidtest(Listlist){for(Objecto:list){updatetablesetxxx=xxx+awherea=?andb=?}}这个方法在不加事务注解情况下,在并发执行时,xxx字段,在我理解是不会有脏数据的吧?但是有可能会跟其他update语句产生死锁对吗?
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

updatetablesetxxx=xxx+awherea=?andb=?
字段a、b都有索引的话,这个更新不会锁整张表(只会锁住更新的那一行数据),产生死锁需要有静态条件,比如:
操作A:
updatetableasetxxx=xxx+awherea=1andb=1
updatetablebsetxxx=xxx+a...
操作B:
updatetablebsetxxx=xxx+a...
updatetableasetxxx=xxx+awherea=1andb=1
这时,就有可能产生死锁了...
                            
查看完整回答
反对 回复 2019-06-19
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

字段a、b都有索引,更新时候通过索引已经明确到要加锁的范围了,不会有死锁的。假如你还有另外一个更新语句,是表锁的话,那可能就会出现死锁了。
                            
查看完整回答
反对 回复 2019-06-19
  • 2 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信