MySQL JDBC:InnoDB死锁后是否有自动重试选项?

Bry*_*eld 9 java mysql deadlock innodb

我正在解决MySQL错误"尝试锁定时发现死锁; 尝试重启事务"

我发现交易可以安全地重新尝试

死锁并不危险.再试一次.
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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我没有启动事务或停止事务命令.只是一个"super insert..select"声明

Vla*_*lad 5

您可以重复声明,但在完美的世界中,您应该回滚您的交易并重新开始.那个世界你的交易很短:)

  • 我认为答案是否定的. (3认同)