無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

SAVEPOINT

名前

SAVEPOINT -- 現在のトランザクション内に新規にセーブポイントを定義する

概要

SAVEPOINT 

savepoint_name

説明

SAVEPOINT は、現在のトランザクション内に新しいセーブポイントを設定します。

セーブポイントとはトランザクション内に付ける特別な印です。セーブポイントを設定しておくと、それ以降に実行されたコマンドを全てロールバックし、トランザクションを設定時の状態に戻すことができます。

パラメータ

savepoint_name

新しいセーブポイントに付与する名前です。

注釈

セーブポイントまでロールバックするには 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の両方が挿入されます。

互換性

SQLでは、同じ名前のセーブポイントが設定された時は、自動的に古い方のセーブポイントを破棄することになっています。 PostgreSQL では、古いセーブポイントも保持されますが、 ロールバックや解放時には新しい方のセーブポイントが使用されます ( RELEASE SAVEPOINT を用いて新しいセーブポイントが解放されると、再び ROLLBACK TO SAVEPOINT RELEASE SAVEPOINT から古いセーブポイントが使用できるようになります)。 この点以外は、 SAVEPOINT は完全にSQLに従っています。

関連項目

BEGIN , COMMIT , RELEASE SAVEPOINT , ROLLBACK , ROLLBACK TO SAVEPOINT

powered by SEO.CUG.NET