2016-12-28 10 views
1

私のデータベースラッパーは、文がトランザクションの一部として実行されるとき(自動コミットではない)を知る必要があります。 beginTransaction()が呼び出されたときにフラグを設定していて、commit()またはrollback()が呼び出されたときにそれを再びクリアします。INNODB:トランザクションを終了するには?

質問は、トランザクションが終了する原因が他に何かありますか?たとえば、デッドロックのために接続が失われたりトランザクションが強制終了された場合のエラーをチェックする必要があります。

答えて

0
  • どれDDL(ALTERDROP、...)は、トランザクションを終了します。 (これは他のベンダーとは異なります。)

  • ネットワーク内の不具合はトランザクションを終了します。このため、「自動再インストール」を有効にすることは賢明ではありません。私はあなたが自動コミット= 0を持っているなら、あなたはその問題を認識できないと思う。

私はautocommit=0を持っていることは非常に危険であることを見つける - 必要なCOMMITを実行することを忘れて(あるいは失敗)には余りにも簡単です。代わりに、私はと同じクライアントサブルーチンにBEGINCOMMITを持つことを好みます。はい、これによりサブルーチンの構造が異なるように強制される可能性がありますが、BEGINCOMMITを「一緒に」持つことで、トランザクションが混乱する可能性は低くなります。

以降のエラーをすべての文で確認してください。 Galeraでは、COMMITでも失敗する可能性があります。 (それは他のノードが参照されているためです)

関連する問題