在for循环中使用deleteData将数据库的记录更新为isDel = 1,结果报DeadLock的错误。
目前改成用synchronized修饰的方法调用事务方法了,不知道还会不会出现这个问题
SpringBoot事务方法上加synchronized关键字操作数据库会导致mysql死锁吗?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Tomshidi 2021-11-08 23:21关注
- 如果你只有这
deleteData
这一个方法更新数据库,那你在这个方法上加synchronize是可以解决问题的。 - 但是实际上肯定有其他方法还会更新相同的表,相同的行,所以如果用synchronize的方式,你就需要对每个方法都加锁,且锁住同一个对象,这在实际业务中是非常损耗性能的,公司里不可能用这种方式。当然你自己的项目就随意喽。
- 真正解决问题的方式应该是去分析死锁的根本原因:1. 死锁是哪个索引导致的 2. 哪种场景下会出现。
- 这时你大概率需要去看下面这种博客。当然,如果你是初学者,建议还是去找一个mysql进阶视频教程看下,这块不容易搞懂的。Mysql 行锁、间隙锁和next-key锁详解_程序员掉头发的博客-CSDN博客_mysql next-key锁 Mysql的锁机制Mysql 四种事务隔离级别Mysql MVCC实现机制Mysql中的几种行锁(间隙锁、next-key锁) https://blog.csdn.net/qq_39751320/article/details/106299388
解决 无用评论 打赏 举报 - 如果你只有这
悬赏问题
- ¥50 VS2019,xamarin框架串口调试报错Java.Lang.SecurityException: Exception of type
- ¥20 QT如何判断QLineF线鼠标划过事件
- ¥15 关于#phpstorm#的问题:phpstorm编辑工具 光标选中了就会自动复制到粘贴板上 这样我之前复制的内容就失效了
- ¥15 pychram安装jupyter插件
- ¥60 悬赏破解越狱iphone4s中360保险箱密码遗忘
- ¥20 ARKts悬浮窗和快捷方式问题
- ¥15 linux中nginx服务器提示not found on accelerator,如何解决?(语言-php|操作系统-linux)
- ¥15 comparecluster没有办法kegg
- ¥15 远程访问linux主机超时
- ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例