确保COMMIT上的MySQL事务失败

时间:2018-01-30 17:51:32

标签: mysql testing transactions

我想测试一个脚本,当MySQL事务失败时它会做什么。所以我想在COMMIT上模拟交易失败。

图像脚本打开事务,进行一些查询,然后提交事务。我想在事务中植入一些额外的查询,以确保事务在ROLLBACK上失败。所以我可以测试脚本如何从转换失败中恢复过来。

我不想使用明确的COMMIT。我想在提交失败时模拟一些真实案例。确切的DB结构并不重要。它可能适应解决方案。

修改:我需要事务在COMMIT失败,而不是先前的某些查询。因此,在FOREIGN_KEY_CHECKS=0之前回滚的答案不是我想要的。比如这个:How to simulate a transaction failure?

我未成功的尝试:

  • 插入带有无效PK或FK的行会立即失败。使用COMMIT临时禁用FK支票不会有帮助,因为他们不会在{{1}}上重新检查。如果它是psql,那么可靠的约束会有所帮助。但不是在mysql中。

  • 在两个事务中打开两个并行事务并插入具有相同PK(或具有唯一constaint的任何列)的行会锁定插入时的后一个事务并等待前一个事务。因此,事务在插入时回滚而不是在提交。

1 个答案:

答案 0 :(得分:0)

所以我相信你可以试试以下

  1. 两阶段提交:使用两个数据库(第一个和第二个)并生成 使用两阶段提交。当commit语句应该是 执行后你可以关闭第二个数据库。这样你的提交 操作将失败,事务将回滚。
  2. 您执行了几次插入操作,在您提交数据库服务器之前就已经死了。如果事务未收到提交,则事务可能会失败。
  3. 希望它有所帮助!