質問: 『mysqlで自動コミットモード (autocommit)を無効にした場合、トランザクションは、SQL文の実行によって暗黙的に開始する。』 という記事をネットで見かけたのですがこれについて気になることがあったのでご存知の方いたら教えていただきたいです! 1暗黙的に開始されたトランザクションが終了するのはいつなのか?Quitなどで接続が切れた時? 2クエリログを確認したところ暗黙的なトランザクション開始を表すような内容が見当たらなかったのですが、暗黙的に開始されたトランザクションのタイミングをログなどで確認する方法はありますでしょうか? ちなみにMysqlの仕組みが知りたいだけで「仕事で困ってる」や「○○を実現したい」みたいな目的があるわけではございません・・ 何卒よろしくお願いいたします。
回答: いちばん頼りになる資料は、公式のリファレンスです(13.3.1 START TRANSACTION、COMMIT、および ROLLBACK 構文)。 > > autocommit 変数を 0 に設定することによって自動コミットモードを無効にしたあと、トランザクションセーフテーブル (InnoDB または NDB のテーブルなど) への変更がただちに永続的になることはありません。COMMIT を使用して変更をディスクに格納するか、または ROLLBACK を使用して変更を無視する必要があります。 > > > ということで、 > > 1暗黙的に開始されたトランザクションが終了するのはいつなのか?Quitなどで接続が切れた時? > > > * `COMMIT`あるいは`ROLLBACK`で結果を確定させたとき * `ALTER TABLE`といったDDLなどトランザクションに入れられないSQL文を投げて暗黙のうちにコミット扱いとなったとき * エラーや接続断などによる強制ロールバック などが発生した場面です。 > > 2クエリログを確認したところ暗黙的なトランザクション開始を表すような内容が見当たらなかったのですが > > > **最初から始まっている**と考えるのがいちばんスッキリします。`COMMIT`や`ROLLBACK`で閉じればまた次のトランザクションが暗黙にスタートします。