UPDATE accounts SET balance = balance - 10000 WHERE acc_id = 1;
SAVEPOINT point1;
UPDATE accounts SET balance = balance + 10000 WHERE acc_id = 2;
-- エラー発生時:
ROLLBACK TO point1;
-- 最終確定:
COMMIT;
もう少し詳しく
トランザクションは、最初のDML文(INSERT, UPDATE, DELETE, MERGE)が実行された時点で自動的に開始されます。トランザクションを制御する主なコマンドは以下です。① COMMIT:トランザクション内のすべての変更をデータベースに永久的に保存・確定し、ロックを解放します。② ROLLBACK:トランザクション内のすべての変更を破元(実行前の状態)に取り消し、ロックを解放します。③ SAVEPOINT セーブポイント名:トランザクション内に中間保存場所を設定します。ROLLBACK TO セーブポイント名 を実行することで、特定の中間地点まで部分的に処理を取り消すことができます。
試験でのポイント