SAVEPOINT

Name

SAVEPOINT -- 在目前交易裡定義一個新的保存點

Synopsis

SAVEPOINT savepoint_name

描述

SAVEPOINT 在目前交易裡建立一個新的保存點。

保存點是交易中的一個特殊記號,它允許將那些在它建立後執行的命令全部回滾, 把交易的狀態恢復到保存點所在的時刻。

參數

savepoint_name

賦予新保存點的名字。

注意

使用 ROLLBACK TO 回滾到一個保存點。 使用 RELEASE SAVEPOINT 刪除一個保存點,但是保留該保存點建立後執行的命令的效果。

保存點只能在一個交易裡面建立。 在一個交易裡面可以定義多個保存點。

例子

建立一個保存點,稍後撤銷這個保存點建立後執行的所有的命令的結果:

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 裡,將保留舊的保存點,但是在回滾或者釋放的時候,只使用最近的那個。 (釋放了新的保存點將導致舊的再次成為 ROLLBACK TO SAVEPOINTRELEASE SAVEPOINT 可以訪問的保存點。)

又見

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, ROLLBACK TO