INNODB:交易结束了什么?

时间:2016-12-28 17:17:06

标签: mysql innodb transactions

我的数据库包装器需要知道语句何时作为事务的一部分执行(非自动提交)。我在调用beginTransaction()时设置了一个标志,并在调用commit()或rollback()时再次清除它。

问题是,还有什么可能导致交易结束?例如,我需要检查连接丢失或由于死锁导致事务被终止的错误。

1 个答案:

答案 0 :(得分:1)

  • 任何DDL(DROPautocommit=0,...)都会终止交易。 (这与其他供应商不同。)

  • 网络中的打嗝将终止交易。因此,unwise to have 'auto-reconnect'已启用。我怀疑如果你有autocommit = 0,你就无法识别出打嗝。

我发现拥有COMMIT是非常危险的 - 很容易忘记(或以其他方式失败)执行必要的BEGIN。相反,我更喜欢在相同的客户端子例程中使用COMMITBEGIN。是的,这可能会强制重新调整子例程,但是,通过将COMMITCOMMIT'放在一起',我不太可能搞乱交易。

每个语句后检查错误。使用Galera,即使<form onsubmit="return validation()"> <span>Reason for inquiry: <span> <select style="color:black" name="reasons"> <option value="catering">Catering</option> <option value="private party">Private Party</option> <option value="feedback">Feedback</option> <option id="selectedOther" value="other">Other</option> </select> </form> 也会失败。 (因为这是咨询其他节点的时候。)

相关问题