SpringBoot事务方法上加synchronized关键字操作数据库会导致mysql死锁吗?

img

在for循环中使用deleteData将数据库的记录更新为isDel = 1,结果报DeadLock的错误。
目前改成用synchronized修饰的方法调用事务方法了,不知道还会不会出现这个问题

  1. 如果你只有这 deleteData 这一个方法更新数据库,那你在这个方法上加synchronize是可以解决问题的。
  2. 但是实际上肯定有其他方法还会更新相同的表,相同的行,所以如果用synchronize的方式,你就需要对每个方法都加锁,且锁住同一个对象,这在实际业务中是非常损耗性能的,公司里不可能用这种方式。当然你自己的项目就随意喽。
  3. 真正解决问题的方式应该是去分析死锁的根本原因:1. 死锁是哪个索引导致的 2. 哪种场景下会出现。
  4. 这时你大概率需要去看下面这种博客。当然,如果你是初学者,建议还是去找一个mysql进阶视频教程看下,这块不容易搞懂的。
    Mysql 行锁、间隙锁和next-key锁详解_程序员掉头发的博客-CSDN博客_mysql next-key锁 Mysql的锁机制Mysql 四种事务隔离级别Mysql MVCC实现机制Mysql中的几种行锁(间隙锁、next-key锁) https://blog.csdn.net/qq_39751320/article/details/106299388