我的滥用事务经历

1.死锁情形:方法A有事务,在方法A中调用方法B,方法B开启独立事务。在B中更新A中已更新的数据,出现死锁。

@Transactional

public void functionA() {

    // A方法相关逻辑

    // 更新表C数据

    // 调用方法B

}

@Transactional(propagation = Propagation.REQUIRES_NEW)

public void functionB(){

    // 方法B相关逻辑

     // 更新表C数同一条数据    ----此时会出现死锁

}

2.原因分析:A事务中对表C数据的更新操作会在该条数据上加上排他锁(X锁),A方法事务未提交,并开启新事务B,B中再次进行数据库操作时无法操作上了排他锁的数据,因而出现死锁。

3.思考:在实际编码过程中,思考这种在事务A中开启新事务B的做法是否必要。很多时候是不必要的。

4.链接一个学习数据库死锁相关的文章:两个事物 update同一张表出现的死锁问题

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容