MySQL autocommit

MySQL の autocommit / start transaction についてちょっと調べる機会があったので、メモ。 以下、 MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.4.1 START TRANSACTION、COMMIT、そして ROLLBACK 構文 より引用。

AUTOCOMMIT

デフォルトにより、MySQL は自動コミットモードが有効な状態で起動します。これは、テーブルを更新(変更)するステートメントを実行したとたん、MySQL がディスク上に更新を格納する、という意味です。

もしトランザクション セーフ ストレージ エンジン(InnoDBや NDB Cluster のような物)を利用していたら、次のステートメントを利用して自動コミットモードを無効にする事ができます。

SET AUTOCOMMIT=0;

START TRANSACTION

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

START TRANSACTION を利用すると、自動コミットは COMMIT や ROLLBACK を利用してトランザクションを終了するまで無効のままです。そして自動コミット モードはその前の状態に戻ります。

BEGIN と BEGIN WORK は、トランザクションを始める START TRANSACTION のエイリアスとしてサポートされています。