デフォルトにより、MySQL は自動コミット
モードが有効な状態で各クライアント接続を起動します。自動コミットが有効な時、もしステートメントがエラーを返さなければ
MySQL は各 SQL
ステートメントの後にコミットを行います。もし
SQL
ステートメントがエラーを返したら、コミットやロールバック性能はそのエラーによって決まります。詳しくは
項13.5.15. 「InnoDB
エラー処理」
を参照してください。
もし自動コミット モードがオフで、最後のトランザクションを明示的にコミットせずに接続を閉じると、MySQL はそのトランザクションをロールバックします。
次の各ステートメント(そしてそれらの同義語)は、まるでステートメントを実行する前に
COMMIT
を行ったかのように、暗黙にトランザクションを終了します。
ALTER FUNCTION
、ALTER
PROCEDURE
、ALTER
TABLE
、BEGIN
、CREATE
DATABASE
、CREATE
FUNCTION
、CREATE
INDEX
、CREATE
PROCEDURE
、CREATE
TABLE
、DROP
DATABASE
、DROP
FUNCTION
、DROP
INDEX
、DROP
PROCEDURE
、DROP
TABLE
、LOAD DATA INFILE
LOCK TABLES
、RENAME
TABLE
、SET
AUTOCOMMIT=1
、START
TRANSACTION
、TRUNCATE
TABLE
、UNLOCK TABLES
MySQL 5.1.3 から、ALTER
VIEW
、CREATE
TRIGGER
、CREATE
USER
、CREATE
VIEW
、DROP
TRIGGER
、DROP
USER
、DROP VIEW
、そして
RENAME USER
ステートメントは暗黙的なコミットを引き起こすようになりました。
UNLOCK TABLES
は、もしテーブルが現在 LOCK
TABLES
でロックされていたらトランザクションを行います。これは、FLUSH
TABLES WITH READ LOCK
ステートメントがテーブル レベル
ロックを取得しない為、これに続く
UNLOCK TABLES
に対しては行われません。
InnoDB
内の CREATE
TABLE
ステートメントは単一トランザクションとして生成されます。これは、ユーザからの
ROLLBACK
はトランザクションの最中にユーザが作成した
CREATE TABLE
ステートメントを解除しないという意味です。
CREATE TABLE
と DROP
TABLE
は、もし TEMPORARY
キーワードが利用されたらトランザクションを実行しません。(これは、コミットを引き起こさない
CREATE INDEX
のようなテンポラリ
テーブルへのその他の操作には当てはまりません。)
MySQL 5.1.11 以前では、LOAD DATA
INFILE
は全てのストレージ
エンジンに対して暗黙的なコミットを引き起こしました。MySQL
5.1.12 からは、 NDB
ストレージエンジンを利用しているテーブルに対してだけ暗黙的なコミットを引き起こすようになりました。更なる情報については、バグ
#11151を参照してください。
トランザクションはネスト化されません。これは、START
TRANSACTION
ステートメントかその同義語の1つを発行する時点でのトランザクションに対して実行される、暗黙的な
COMMIT
の結果です。
トランザクションが ACTIVE
状態の間は、暗黙的なコミットを引き起こすステートメントは
XA
トランザクションでは利用する事はできません。