我正在处理MySQL错误“尝试获取锁时发现死锁;请重试事务”。
我发现可以安全地重新尝试该事务。
死锁并不危险。只需再次尝试即可。
http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html
有一个单独的“超级插入..选择”语句,它在选择两个其他表的联接组合并在瓶颈表上使用子语句条件后插入到瓶颈表中,并在几个小表中使用。
瓶颈是“等待锁定”,毫无疑问正在等待写锁定。InnoDB似乎非常适合(写重表)。对于这个语句的犹豫现在全部消失了。
但现在问题出现了:每执行100次该语句,大约会有1-2次失败,原因是死锁。我认为死锁只发生在“超级插入..选择”的实例之间。我将安装该语句的自动重试,但我想知道:问题:MySQL JDBC是否具有在接收异常后启用语句自动重试的选项,还是我必须编写自己的代码来实现?
com.mysql.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
在这种情况下,我没有开始事务或停止事务命令。只有一个“超级插入...选择”语句。