SAVEPOINT・WAL・2PCまで完全網羅
トランザクションの変更を永続化(確定)する命令。COMMIT 後は ROLLBACK で取り消せない。ACID の「D(耐久性)」を保証する。
BEGIN TRANSACTION; UPDATE 在庫 SET 数量 = 数量 - 1 WHERE 商品ID = 'P01'; INSERT INTO 受注 (商品ID, 数量) VALUES ('P01', 1); COMMIT; -- ここで永続化。REDO ログが先に書かれている
トランザクション開始以降の変更を全て取り消す命令。UNDO ログを使って元の状態に戻す。ACID の「A(原子性)」を保証する。
BEGIN TRANSACTION; UPDATE 在庫 SET 数量 = 数量 - 1 WHERE 商品ID = 'P01'; -- 在庫不足を検知してキャンセル ROLLBACK; -- 在庫の変更が UNDO ログで取り消される
BEGIN TRANSACTION; UPDATE テーブルA ...; -- ステップ 1 SAVEPOINT sp1; -- 中間チェックポイントを設定 UPDATE テーブルB ...; -- ステップ 2 -- ステップ 2 でエラー発生 ROLLBACK TO SAVEPOINT sp1; -- ステップ 2 だけ取り消し COMMIT; -- ステップ 1 は確定
| 設定 | 動作 | ROLLBACK |
|---|---|---|
| autocommit=ON(デフォルト) | 各 SQL 文が即座にコミットされる | ❌ できない |
| autocommit=OFF / BEGIN 使用 | 明示的にコミットするまで保留 | ✅ できる |
-- MySQL / PostgreSQL での明示的トランザクション START TRANSACTION; -- autocommit を一時的に無効化 UPDATE ...; COMMIT; -- または ROLLBACK
複数のデータベースにまたがるトランザクションを整合性を保ちながら確定するプロトコル。
1 人でも NO を返したらコーディネーターは全員に ROLLBACK を指示。
読了ボタンを押すとトップページの進捗に反映されます