欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

java-mysql 死锁 Deadlock found when trying to get lock; try restarting transaction

程序员文章站 2022-03-14 09:30:29
...
mysqljava死锁sqltransaction

语言:java 数据库:mysql 5.0 数据引擎:innodb

项目中遇到一个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)

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

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

各位大神,帮忙看下,看有什么解决方案或思路,不胜感激!