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 のエイリアスとしてサポートされています。