iwason diary

健康、プログラミング、日常系などなど

MySQLでTransactionを使う

MySQLでは、AUTOCOMMITの設定により、Transactionの挙動が異なる。

 

InnoDBを利用してTransactionを利用するためには、

 

START TRANSACTION;

または

SET AUTOCOMMIT=0;

 

上記のどちらかを先に実行し、更新系クエリを実行したあと、

COMMIT(またはROLLBACK)

を実行することでTransactionを利用することができます。

 

違い

AUTOCOMMITが有効の場合はSTART TRANSACTIONを実行しないと

MyISAMなどと同じように即時COMMITされてしまいます。

 

また、START TRANSACTIONは、COMMIT/ROLLBACKを実行するまでの間有効になるため、

その後の更新クエリはすべて自動コミットとなります。

 

AUTOCOMMITが無効の場合は、COMMIT/ROLLBACKまたは、

暗黙的なコミットが走るクエリ以外は1つのトランザクション内のように振る舞います。

http://dev.mysql.com/doc/refman/5.1/ja/innodb-implicit-commit.html

 

 

コミット漏れや意図しないコミットをさけるという目的であれば

AUTOCOMMIT有効にし、Transactionを使用したい時にだけ

START TRANSACTIONを使用すればいいかと思います。