?
本文檔使用 php中文網手冊 發(fā)布
SAVEPOINT savepoint_name
SAVEPOINT在當前事務里建立一個新的保存點。
保存點是事務中的一個特殊記號,它允許將那些在它建立后執(zhí)行的命令全部回滾, 把事務的狀態(tài)恢復到保存點所在的時刻。
賦予新保存點的名字。
使用ROLLBACK TO SAVEPOINT回滾到一個保存點。 使用RELEASE SAVEPOINT刪除一個保存點, 但是保留該保存點建立后執(zhí)行的命令的效果。
保存點只能在一個事務塊里面建立。在一個事務里面可以定義多個保存點。
建立一個保存點,稍后撤銷這個保存點建立后執(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;
上面的事務將插入數(shù)值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標準的。