MySQL 8.0 リファレンスマニュアル


13.3.3 暗黙的なコミットを発生させるステートメント

このセクションに示されているステートメント (およびそのすべてのシノニム) は、ユーザーがこのステートメントを実行する前に COMMIT を実行したかのように、現在のセッション内でアクティブなすべてのトランザクションを暗黙的に終了します。

これらのステートメントのほとんどは、実行後に暗黙的なコミットを引き起こします。 その目的は、そのような各ステートメントを独自の特別なトランザクションで処理することです。 トランザクション制御ステートメントおよびロックステートメントは例外です: 実行前に暗黙的なコミットが発生した場合、後に別のコミットは発生しません。

  • データベースオブジェクトを定義または変更するデータ定義言語 (DDL) ステートメント。 ALTER EVENT, ALTER FUNCTION, ALTER PROCEDURE, ALTER SERVER, ALTER TABLE, ALTER VIEW, CREATE DATABASE, CREATE EVENT, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE ROLE, CREATE SERVER, CREATE SPATIAL REFERENCE SYSTEM, CREATE TABLE, CREATE TRIGGER, CREATE VIEW, DROP DATABASE, DROP EVENT, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP ROLE, DROP SERVER, DROP SPATIAL REFERENCE SYSTEM, DROP TABLE, DROP TRIGGER, DROP VIEW, INSTALL PLUGIN, RENAME TABLE, TRUNCATE TABLE, UNINSTALL PLUGIN

    CREATE TABLE および DROP TABLE ステートメントは、TEMPORARY キーワードが使用されている場合はトランザクションをコミットしません。 (これは、コミットを発生させる ALTER TABLECREATE INDEX などの、一時テーブルに対するその他の操作には適用されません。) ただし、暗黙的なコミットは発生しませんが、ステートメントのロールバックもできません。つまり、このようなステートメントを使用すると、トランザクションのアトミック性が侵害されます。 たとえば、CREATE TEMPORARY TABLE を使用したあとにトランザクションをロールバックしても、そのテーブルは存在し続けます。

    InnoDB での CREATE TABLE ステートメントは、1 つのトランザクションとして処理されます。 つまり、ユーザーが ROLLBACK を発行しても、ユーザーがそのトランザクション中に実行した CREATE TABLE ステートメントは元に戻されません。

    CREATE TABLE ... SELECT は、一時テーブル以外のテーブルを作成している場合、そのステートメントが実行される前後に暗黙的なコミットを発生させます。 (CREATE TEMPORARY TABLE ... SELECT に対してコミットは発生しません。)

  • mysql データベース内のテーブルを暗黙的に使用または変更するステートメント。 ALTER USER, CREATE USER, DROP USER, GRANT, RENAME USER, REVOKE, SET PASSWORD

  • トランザクション制御およびロックステートメント。 BEGINLOCK TABLESSET autocommit = 1 (この値がまだ 1 でない場合)、START TRANSACTIONUNLOCK TABLES

    UNLOCK TABLES は、非トランザクションテーブルロックを取得するために現在 LOCK TABLES でロックされているテーブルがある場合にのみ、トランザクションをコミットします。 FLUSH TABLES WITH READ LOCK はテーブルレベルのロックを取得しないため、このステートメントに続く UNLOCK TABLES に対してコミットは発生しません。

    トランザクションをネストすることはできません。 これは、START TRANSACTION ステートメントまたはそのシノニムのいずれかを発行するときに、現在のすべてのトランザクションに対して実行される暗黙的なコミットの結果です。

    XA トランザクションが ACTIVE 状態にある間に、暗黙的なコミットを発生させるステートメントをそのトランザクションで使用することはできません。

    BEGIN ステートメントは、BEGIN ... END 複合ステートメントを開始する BEGIN キーワードの使用とは異なります。 後者は暗黙的なコミットを発生させません。 セクション13.6.1「BEGIN ... END 複合ステートメント」を参照してください。

  • データロードステートメント。 LOAD DATALOAD DATA では、NDB ストレージエンジンを使用するテーブルに対してのみ暗黙的なコミットが発生します。

  • 管理ステートメント。 ANALYZE TABLE, CACHE INDEX, CHECK TABLE, FLUSH, LOAD INDEX INTO CACHE, OPTIMIZE TABLE, REPAIR TABLE, RESET (ただし、RESET PERSIST)。

  • レプリケーション制御ステートメントSTART REPLICA | SLAVE, STOP REPLICA | SLAVE, RESET REPLICA | SLAVE, CHANGE REPLICATION SOURCE TO, CHANGE MASTER TO


関連キーワード:  ステートメント, CREATE, TABLE, DROP, トランザクション, コミット, 暗黙, FUNCTION, テーブル, 発生