我的数据库包装器需要知道何时执行语句作为事务的一部分(不是自动犯规)。我将在调用()或回滚()时再次调用begintransaction()时设置标志。
。问题是,还有什么可能导致交易结束?例如,我将需要检查连接丢失或由于死锁而杀死交易的错误。
-
任何DDL(
ALTER
,DROP
,...)终止事务。(这与其他供应商不同。) -
网络中的打ic将终止交易。因此,"自动连接"打开是不明智的。我怀疑,如果您的自动加入= 0,您将无法识别hiccup。
我发现拥有autocommit=0
是非常冒险的 - 忘记(或否则失败)执行必要的COMMIT
非常容易。相反,我更喜欢在相同客户端子例程中使用BEGIN
和COMMIT
。是的,这可能会以不同的方式重组子例程,但是,通过将BEGIN
和COMMIT
'一起进行,我不太可能弄乱交易。
在每个语句之后检查错误。使用Galera,即使COMMIT
也可能失败。(因为那是咨询其他节点的时候。)