ホームページ > データベース > mysql チュートリアル > java-mysql 死锁 Deadlock found when trying to get lock; try restarting transaction

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

WBOY
リリース: 2016-06-06 09:44:55
オリジナル
4070 人が閲覧しました

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)

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

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

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート