我的数据库包装器需要知道语句何时作为事务的一部分执行(非自动提交)。我在调用beginTransaction()时设置了一个标志,并在调用commit()或rollback()时再次清除它。
问题是,还有什么可能导致交易结束?例如,我需要检查连接丢失或由于死锁导致事务被终止的错误。
答案 0 :(得分:1)
任何DDL(DROP
,autocommit=0
,...)都会终止交易。 (这与其他供应商不同。)
网络中的打嗝将终止交易。因此,unwise to have 'auto-reconnect'已启用。我怀疑如果你有autocommit = 0,你就无法识别出打嗝。
我发现拥有COMMIT
是非常危险的 - 很容易忘记(或以其他方式失败)执行必要的BEGIN
。相反,我更喜欢在相同的客户端子例程中使用COMMIT
和BEGIN
。是的,这可能会强制重新调整子例程,但是,通过将COMMIT
和COMMIT
'放在一起',我不太可能搞乱交易。
在每个语句后检查错误。使用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>
也会失败。 (因为这是咨询其他节点的时候。)