我是Working around MySQL error “Deadlock found when trying to get lock; try restarting transaction”
我发现交易可以安全地重新尝试
死锁并不危险。再试一次。
http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html
在选择两个其他表的连接组合并在瓶颈表上使用子语句条件以及一些小表之后,有一个“super insert..select”语句插入到瓶颈表中。
瓶颈正在“等待锁定”,它正在等待写锁无疑。 InnoDB似乎非常合适。 (对于写得沉重的表格)这一陈述的犹豫现在都消失了。
但现在问题出现了:对于语句的每100次执行,由于死锁,其中大约1或2个将失败。我相信死锁只发生在“super insert..select”的实例之间。我将安装该语句的自动重试,但我想知道
问题: MySQL JDBC是否可以选择在收到异常后打开语句的自动重试,或者我是否必须为此编写自己的代码?
com.mysql.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
在这种情况下,我没有启动事务或停止事务命令。只是一个“超级插入......选择”声明
答案 0 :(得分:5)
您可以重复声明,但在完美的世界中,您应该回滚您的交易并重新开始。在那个世界里你的交易很短:)