时间:2021-07-01 10:21:17 帮助过:26人阅读
语言: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)
这时执行就会报以上那个数据库异常。
查了些资料,大概了解是因为多个事物对同一条数据进行操作时,发生了锁的冲突。但是好的解决方案没有找到。
各位大神,帮忙看下,看有什么解决方案或思路,不胜感激!