【发布时间】:2015-04-15 08:17:13
【问题描述】:
我过去主要使用MyISAM作为存储引擎,最近才更多地使用InnoDB;现在我正处于真正开始使用 InnoDB 的 locking 和 isolation levels 的地步。
我一直在阅读documentation,我担心的一件事是it states:
InnoDB 自动检测事务死锁并回滚一个或多个事务以打破死锁。
换句话说,一些应该运行的代码由于死锁而被回滚,突然之间你的数据完整性就因为所说的代码没有运行!?
通常,您必须编写应用程序,以便它们随时准备在事务因死锁而回滚时重新发出事务。
问题是它没有解释如何重新发出查询或测试它们是否因死锁而失败?
这在我看来是一个重大问题,即您希望运行的某些代码(执行查询)可能会被回滚而不是重新发出),而无需您添加额外的代码来避免这种情况。这不应该是自动的吗?
所以有人可以在这里向我解释处理此问题的最佳方法是什么,或者我是否误解了什么。
【问题讨论】:
标签: mysql transactions innodb database-deadlocks