SAVEPOINTは、現在のトランザクション内に新しいセーブポイントを確立します。
セーブポイントとはトランザクション内の特別な印で、確立後に実行されたコマンドを全てロールバックし、セーブポイントの時点の状態にトランザクションを戻すことができます。
セーブポイントまでロールバックするにはROLLBACK TO SAVEPOINTを使用してください。 確立後に行われたコマンドの効果を保持したままセーブポイントを破棄するには、RELEASE SAVEPOINTを使用してください。
セーブポイントはトランザクションブロックの内側でのみ確立することができます。 1つのトランザクションの中で複数のセーブポイントを定義することができます。
セーブポイントを確立し、その後に確立後に実行した全てのコマンドの効果を取消します。
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); COMMIT;
上のトランザクションでは、1と3は挿入されますが、2は挿入されません。
セーブポイントを確立し、その後に破棄します。
BEGIN; INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint; COMMIT;
上のトランザクションでは、3と4が挿入されます。