この節にリストされているステートメント
(および、それらの任意の同義語)
は、ステートメントの実行前に
COMMIT
が実行されたかのように、トランザクションを暗黙的に終了します。
データベースオブジェクトを定義または変更するデータ定義言語
(DDL) ステートメント。
ALTER DATABASE ... UPGRADE DATA
DIRECTORY NAME
,
ALTER EVENT
,
ALTER
PROCEDURE
,
ALTER TABLE
,
CREATE
DATABASE
,
CREATE EVENT
,
CREATE INDEX
,
CREATE
PROCEDURE
,
CREATE TABLE
,
DROP
DATABASE
,
DROP EVENT
,
DROP INDEX
,
DROP
PROCEDURE
,
DROP TABLE
,
RENAME TABLE
,
TRUNCATE
TABLE
.
また、ALTER
FUNCTION
、CREATE
FUNCTION
、および
DROP FUNCTION
も、ストアドファンクション (UDF を除く)
で使用された場合は暗黙的なコミットを引き起こします。(ALTER
FUNCTION
は、ストアドファンクションでのみ使用できます。)
ALTER
TABLE
、CREATE
TABLE
、および
DROP TABLE
は、TEMPORARY
キーワードが使用されている場合はトランザクションをコミットしません。(これは、コミットを引き起こさない
CREATE INDEX
のような一時テーブルへのその他の操作には当てはまりません)。ただし、暗黙的なコミットは実行されませんが、ステートメントもロールバックできません。そのため、このようなステートメントの使用はトランザクションの原子性に違反します。たとえば、CREATE
TEMPORARY TABLE
を使用してからトランザクションをロールバックした場合、テーブルは存在し続けます。
InnoDB
内の
CREATE TABLE
ステートメントは単一トランザクションとして生成されます。これは、ユーザーからの
ROLLBACK
はトランザクションの最中にユーザーが作成した
CREATE TABLE
ステートメントを解除しないという意味です。
MySQL 5.1.3
からは、ALTER
VIEW
、CREATE
TRIGGER
、CREATE
VIEW
、DROP
TRIGGER
、および
DROP VIEW
は暗黙的なコミットを引き起こします。
MySQL 5.1.15
からは、CREATE
TABLE ... SELECT
は、一時的でないテーブルの作成時にこのステートメントが実行される前とあとに暗黙的なコミットを引き起こします。(CREATE
TEMPORARY TABLE ... SELECT
に対しては、コミットは実行されません。)
これは、ロールバック後にマスタ上でテーブルを作成することができてもバイナリログ内での記録に失敗するためスレーブには複製されない、というレプリケーションの最中での発行を防ぐためのものです。詳細については、Bug#22865
を参照してください。
mysql
データベース内のテーブルを暗黙的に使用または変更するステートメント。MySQL
5.1.3
からは、CREATE
USER
、DROP
USER
、および
RENAME USER
は暗黙的なコミットを引き起こします。MySQL
5.1.23
からは、GRANT
、REVOKE
、および
SET PASSWORD
ステートメントは暗黙的なコミットを引き起こします。
トランザクション制御およびロック関連のステートメント。BEGIN
、LOCK
TABLES
、SET autocommit =
1
(この値がまだ 1
でない場合)、START
TRANSACTION
、UNLOCK
TABLES
。
UNLOCK
TABLES
は、もしテーブルが現在
LOCK TABLES
でロックされていたらトランザクションを行います。これは、FLUSH
TABLES WITH READ LOCK
ステートメントがテーブルレベルロックを取得しないため、これに続く
UNLOCK
TABLES
に対しては行われません。
トランザクションはネスト化されません。これは、START
TRANSACTION
ステートメントまたはその同義語のいずれかを発行するときに、現在のすべてのトランザクションに対して実行される暗黙的なコミットの結果です。
暗黙的なコミットを引き起こすステートメントを、XA
トランザクションが
ACTIVE
状態にある間にそのトランザクションで使用することはできません。
BEGIN
ステートメントは、BEGIN
... END
複合ステートメントを開始する
BEGIN
キーワードの利用とは異なります。後者は、暗黙的なコミットを引き起こしません。項8.8.1. 「BEGIN ... END
複合ステートメント構文」
を参照してください。
データロード用ステートメント。LOAD
DATA INFILE。
MySQL 5.1.12
より前のバージョンでは、LOAD
DATA INFILE
は、すべてのストレージエンジンに対して暗黙的なコミットを引き起こしました。MySQL
5.1.12
の時点では、NDB
ストレージエンジンを使用しているテーブルに対してのみ暗黙的なコミットを引き起こします。更なる情報については、バグ
#11151 を参照してください。
管理ステートメント。CACHE
INDEX
、LOAD
INDEX INTO CACHE
。MySQL 5.1.10
からは、ANALYZE
TABLE
、CHECK
TABLE
、OPTIMIZE
TABLE
、および
REPAIR TABLE
は暗黙的なコミットを引き起こします。