java - MySQL JDBC : Is there an option for automatic retry after InnoDB deadlock?

标签 java mysql innodb deadlock

我是Working around MySQL error “Deadlock found when trying to get lock; try restarting transaction”

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

Deadlocks are not dangerous. Just try again.
http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html

在选择两个其他表的连接组合并在瓶颈表和一些小表上使用子语句条件后,有一个“ super 插入..选择”语句插入到瓶颈表中。

瓶颈是“waiting for lock”,毫无疑问是在等待写锁。 InnoDB 似乎是完美的选择。 (对于写入繁重的表)现在对这一个语句的犹豫都消失了。

但现在问题来了:每执行 100 次语句,大约有 1 到 2 次会因为死锁而失败。我相信死锁只发生在“ super 插入..选择”的实例之间。我将安装该语句的自动重试,但我想知道

问题:MySQL JDBC 是否可以选择在收到异常后打开语句的自动重试,还是我必须为此编写自己的代码?

com.mysql.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

在这种情况下,我没有启动交易或停止交易命令。就是那个“ super 插入..选择”语句

最佳答案

您可以重复该语句,但在理想情况下,您应该回滚事务并重新开始。在那个世界里你的交易会很短暂 :)

关于java - MySQL JDBC : Is there an option for automatic retry after InnoDB deadlock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6987918/

相关文章:

mysql - 查询两方之间的消息,但对删除的用户隐藏消息

MySql 5.6 : Ignores innodb_page_size setting in my. 初始配置文件

mysql - Innodb + 8K长度行限制

java - JFrame 使用 Alpha channel 绘制动画 gif 图像

java - 简单的基于 java 的工作流管理器/数据工作流,能够启动分机。应用程序,调用网络服务等

Java:找出*为什么*一个类被加载

java - 简单更新已锁定

java - Container.validate() 方法有什么作用?

php - Sphinx 多动态数据库索引

php - 让 PHP 解析大文件是否比从 MySQL 数据库调用数据更快?