记一个mysql死锁问题,在并发情况下导致的数据库更新超时
1、问题:
在执行mysql数据库更新操作,根据条件更新其中一列的值,具体的更新语句类似如下:
update people set name = 'zhangsan' where id = 1 a and age = 24;
但是在Java中使用
parallelStream().foreach(a->{
//sql更新操作
})
并发流就会出现问题,导致有的更新会失败,报如下错误:
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
2、解决:
主要是在并发流执行过程中,sql根据条件进行更新会对表中的行进行锁定,导致出现死锁,而死锁就会导致后边再来的更新语句无法获取到锁进行执行而超时,所以遇到更新的语句时,还是需要按顺序就行更新,不要使用并发流
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?