PostgreSQL SAVEPOINT

2021-09-13 14:08 更新

SAVEPOINT — 在當(dāng)前事務(wù)中定義一個(gè)新的保存點(diǎn)

大綱

SAVEPOINT savepoint_name

描述

SAVEPOINT在當(dāng)前事務(wù)中建立一個(gè)新保存點(diǎn)。

保存點(diǎn)是事務(wù)內(nèi)的一種特殊標(biāo)記,它允許所有在它被建立之后執(zhí)行的命令被 回滾,把該事務(wù)的狀態(tài)恢復(fù)到它處于保存點(diǎn)時(shí)的樣子。

參數(shù)

savepoint_name

給新保存點(diǎn)的名字。

注解

使用ROLLBACK TO SAVEPOINT回滾到一個(gè)保存點(diǎn)。 使用RELEASE SAVEPOINT銷毀一個(gè)保存點(diǎn), 但保持在它被建立之后執(zhí)行的命令的效果。

保存點(diǎn)只能在一個(gè)事務(wù)塊內(nèi)建立??梢栽谝粋€(gè)事務(wù)內(nèi)定義多個(gè)保存點(diǎn)。

示例

要建立一個(gè)保存點(diǎn)并且后來撤銷在它建立之后執(zhí)行的所有命令的效果:

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;

上面的事務(wù)將插入值 1 和 3,但不會(huì)插入 2。

要建立并且稍后銷毀一個(gè)保存點(diǎn):

BEGIN;
    INSERT INTO table1 VALUES (3);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (4);
    RELEASE SAVEPOINT my_savepoint;
COMMIT;

上面的事務(wù)將插入 3 和 4。

兼容性

當(dāng)建立另一個(gè)同名保存點(diǎn)時(shí),SQL 要求之前的那個(gè)保存點(diǎn)自動(dòng)被銷毀。在 PostgreSQL中,舊的保存點(diǎn)會(huì)被保留,不過在進(jìn)行 回滾或釋放時(shí)只能使用最近的那一個(gè)(用 RELEASE SAVEPOINT釋放較新的保存點(diǎn)將會(huì) 導(dǎo)致較舊的保存點(diǎn)再次變得可以被 ROLLBACK TO SAVEPOINTRELEASE SAVEPOINT訪問)。在其他方面, SAVEPOINT完全符合 SQL。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)