次の各ステートメント(そしてそれらの同義語)は、まるでステートメントを実行する前に
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.15 から、CREATE TABLE ...
SELECT
はステートメントが実行される前後に暗黙的なコミットを引き起こすようになりました。しかし、CREATE
TEMPORARY TABLE ... SELECT
には何のコミットも起きません。
MySQL 5.1.11 以前では、LOAD DATA
INFILE
は全てのストレージ
エンジンに対して暗黙的なコミットを引き起こしました。MySQL
5.1.12 からは、 NDB
ストレージエンジンを利用しているテーブルに対してだけ暗黙的なコミットを引き起こすようになりました。更なる情報については、バグ
#11151を参照してください。
MySQL 5.1.15 以降では、非テンポラリ
テーブルを作成している時 CREATE TABLE
... SELECT
ステートメントは暗黙的なコミットを含みます。これは、ロールバック後にマスタ上でテーブルを作成する事ができてもバイナリログ内での記録に失敗する為スレーブには複製されない、という複製の最中での発行を防ぐ為の物です。更なる情報については、バグ
#22865を参照してください。
トランザクションはネスト化されません。これは、START
TRANSACTION
ステートメントかその同義語の1つを発行する時点でのトランザクションに対して実行される、暗黙的な
COMMIT
の結果です。
トランザクションが ACTIVE
状態の間は、暗黙的な作業を引き起こすステートメントは
XA
トランザクションでは利用する事はできません。