mysql 死锁 Deadlock found when trying to get lock; try restarting transa

xuejie_1989 2014-01-05 12:23:15
项目中遇到一个mysql死锁的问题,报的异常如下 :com.mysql.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

我把问题简单化一下:

表t有id,a,b,c四个整型字段,id是primary key,a是unique key

5个Thread同时进行如下相同的5条sql操作,每个Thread这5条sql在同一个事物中:

insert into t(a,b,c) values(1,1,1) on duplicate key update b=b+VALUES(b)
insert into t(a,b,c) values(2,2,2) on duplicate key update b=b+VALUES(b)
insert into t(a,b,c) values(3,3,3) on duplicate key update b=b+VALUES(b)
insert into t(a,b,c) values(4,4,4) on duplicate key update b=b+VALUES(b)
insert into t(a,b,c) values(5,5,5) on duplicate key update b=b+VALUES(b)

这时执行就会报以上那个数据库异常。

查了些资料,大概了解是因为多个事物对同一条数据进行操作时,发生了锁的冲突。但是好的解决方案没有找到。

各位大神,帮忙看下,看有什么解决方案或思路,不胜感激!
...全文
1806 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
九月茅桃 2014-10-06
  • 打赏
  • 举报
回复
你数据库的事务隔离级别是什么?
xiaov2 2014-08-05
  • 打赏
  • 举报
回复
解决没 我也遇到了
xuejie_1989 2014-01-08
  • 打赏
  • 举报
回复
没有人回复吗
xuejie_1989 2014-01-06
  • 打赏
  • 举报
回复
自己顶一下吧
  大家好,我是录制课程的老师,课程已经上线课堂,欢迎大家试听,感谢同学们的支持。在你们的学习中我会全力助你提升MySQL技能,助你冲击更高年薪。支持课程答疑,支持一对一答疑服务,由课程老师直接回答。    MySQL凭借着它不错的性能、不错的稳定性、数据的安全性常年稳居行业老二宝座。    越来越多的DBA和后端同学在工作中少不了和MySQL打交道,也经常会产生这样的疑问:    为什么我写的sql语句性能这么低?  为什么明明我建了索引却没有用到索引?  为什么突然我的数据就成了乱码?  为什么我备份的文件在主库恢复,数据无法同步到从库?  为什么我的数据库数据不多,却占了很多的空间?  生产中我应该选择哪种隔离级别?  生产中都在使用innodb存储引擎,我却对它一无所知?  我应该怎么规划缓冲池才能让数据库性能更高?  为什么我做表数据迁移这么慢?  为什么我写的sql会造成那么多的锁冲突、死锁?  为什么我不能将数据恢复到任意时间点?  为什么我不能解决公司主从复制架构中的故障?  吧啦吧啦一大堆问题……    在面试中MySQL的一些知识更成为躲不过的问题,比如b+tree索引、MVCC、隔离级别的实现、锁的使用,主从复制,MySQL性能优化、事务两阶段提交等等都成为了面试考题重灾区。    我的课程就是从实际工作来,从问题出发,带着问题来学习MySQL,想解决问题就要学习新的知识,大家跟紧老司机,MySQL的面纱就会慢慢摘下。

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧