めもちょー

メモ帳代わりに使っています。

MySQLの暗黙的COMMIT

DDLとは

DDL(Data Definition Language)とは日本語では「データ定義言語」と言い、一言で言えばCREATE, DROP, ALTER文のことです。

暗黙的コミットとは

DDLではトランザクションを張れません。
DDLにはCOMMITを宣言していなくても自動的にCOMMITと同等の処理を発生させてしまう暗黙的COMMITが伴います。
例え、START TRANSACTIONでDDLの前にトランザクションを張っていても暗黙的COMMITのためにROLLBACKで元に戻すことはできません。

DDLの暗黙的コミットの例

START TRANSACTION;
DROP TABLE tbl;
ROLLBACK;

敢えて書くと下記のようにDDLであるDROP文の上下にCOMMITが走ります。

START TRANSACTION;

-- 処理の前に自動的にコミットされる
-- COMMIT;
DROP TABLE tbl;
-- 処理の後に自動的にコミットされる
-- COMMIT;

ROLLBACK;

DELETEは暗黙的コミットにはならないためトランザクションを張っておけばROLLBACKが可能です。
一方TRUNCATEDROPは暗黙的COMMITが伴うためROLLBACKが不可能です。