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

新手上路,请多包涵

问题描述

需要批量更新一个字段值,update table set xxx=xxx+a where a=? and b=? a b有索引,还有另外一个主键索引
会有并发的情况,可以不考虑事务回滚

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
public void test(List list){

    for (Object o : list) {
        update table set xxx=xxx+a where a=? and b=?
    }
}
这个方法在不加事务注解情况下,在并发执行时,xxx字段,在我理解是不会有脏数据的吧?
但是有可能会跟其他update语句产生死锁对吗?

阅读 3.7k
2 个回答
update table set xxx=xxx+a where a=? and b=?

字段a、b都有索引的话,这个更新不会锁整张表(只会锁住更新的那一行数据),产生死锁需要有静态条件,比如:

操作A:
    update table a set xxx=xxx+a where a=1 and b=1
    update table b set xxx=xxx+a...
操作B:
    update table b set xxx=xxx+a...
    update table a set xxx=xxx+a where a=1 and b=1

这时,就有可能产生死锁了...

字段a、b都有索引,更新时候通过索引已经明确到要加锁的范围了,不会有死锁的。
假如你还有另外一个更新语句,是表锁的话,那可能就会出现死锁了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题