クライアント接続が失われたときにトランザクションがどうなるか。
クライアントの例は、リモートサーバーインスタンスへのトランザクションを開始するWebアプリケーションコードです。クライアントはSQLコードをサーバーに送信し、トランザクションが完了するのを待ちます。
ネットワーク接続が失敗した場合はどうなりますか?それは私たちが取引しているポイントに依存しますか?それは無関係ですか?中止されましたか?
http://dev.mysql.com/doc/refman/5.6/en/innodb-implicit-commit.html は言う:
自動コミットが無効になっているセッションが、最後のトランザクションを明示的にコミットせずに終了した場合、MySQLはそのトランザクションをロールバックします。
つまり、何らかの理由で、またはネットワーク接続が失敗したなどのエラーが発生したためにセッションが切断された場合、進行中のトランザクションはロールバックされます。
考えてみれば、これがRDBMSが行う唯一の適切なことです。トランザクションの作業が部分的にしか完了していないかどうかはわかりません。たとえば、ある銀行口座から借方記入し、別の銀行口座に入金して口座振替を反映させようとしたとします。デビットは発生したがクレジットは発生せず、接続が失われた場合、MySQLにはトランザクションを完了したり、次に何をしたいかを知る方法さえありません。したがって、これまでのすべての作業をロールバックする必要があります。
一連のステートメントの自動コミットモードを暗黙的に無効にするには、START TRANSACTIONステートメントを使用します。