現在のトランザクションを中止し、そのトランザクションで行ったすべての変更を破棄します。
構文
ROLLBACK [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ]パラメーター
| パラメーター | 説明 |
|---|---|
WORK | TRANSACTION | 動作に影響を与えない任意のキーワードです。以下の文はすべて等価です:ROLLBACK、ROLLBACK WORK、ROLLBACK TRANSACTION。 |
AND CHAIN | 現在のトランザクション終了直後に、新しいトランザクションを即座に開始します。新しいトランザクションは、直前に終了したトランザクションと同じトランザクション特性(「SET TRANSACTION」をご参照ください)を継承します。 |
AND NO CHAIN | デフォルトの動作です。新しいトランザクションを開始せずに、現在のトランザクションを終了します。この句を省略した場合と等価です。以下の文はすべて等価です:ROLLBACK、ROLLBACK WORK、ROLLBACK AND NO CHAIN、ROLLBACK WORK AND NO CHAIN。 |
注意事項
トランザクションを終了して変更を永続化する(破棄しない)場合は、COMMIT を使用してください。
トランザクションブロック外で
ROLLBACKを実行すると、警告が発行され、効果はありません。トランザクションブロック外で
ROLLBACK AND CHAINを実行すると、エラーが返されます。
例
トランザクション内のすべての変更を中止する
BEGIN;
INSERT INTO orders (product_id, quantity) VALUES (101, 5);
UPDATE inventory SET stock = stock - 5 WHERE product_id = 101;
ROLLBACK;
-- すべての変更が破棄され、データベースは変更されません。ギャップなしでトランザクションを連鎖させる
ロールバック直後に、直前に終了したトランザクションと同じトランザクション特性を持つ新しいトランザクションを即座に開始する場合は、AND CHAIN を使用します。
BEGIN;
DELETE FROM staging_data WHERE processed = true;
ROLLBACK AND CHAIN;
-- DELETE は破棄されます。新しいトランザクションが即座に開始され、
-- 同じトランザクション特性が継承されます。
INSERT INTO audit_log (event, ts) VALUES ('rollback_test', NOW());
COMMIT;次のステップ
COMMIT — トランザクションを終了し、その変更を永続化します
SET TRANSACTION — 分離レベルやアクセスモードなどのトランザクション特性を設定します