回退事务处理
回退事务处理会撤消其更改。您可以回退当前整个事务处理,或仅将其回退到指定的保存点。
要将当前事务处理仅回退到指定的保存点,则必须使用包含 TO SAVEPOINT 子句的 ROLLBACK 语句。
要回退当前整个事务处理,请使用不包含 TO SAVEPOINT 子句的 ROLLBACK 语句,或(在 SQL Developer 环境中)使用回退更改图标。
回退整个当前事务处理会执行以下操作:
-
结束事务处理
-
还原其所有更改
-
擦除其所有保存点
-
释放所有事务处理锁
仅将当前事务处理回退到指定的保存点会执行以下操作:
-
不结束事务处理
-
仅还原在指定的保存点后所做的更改
-
仅擦除在指定的保存点后设置的保存点 (排除指定的保存点本身)
-
释放在指定的保存点后获取的所有表和行的锁
请求访问在指定的保存点后锁定的行的其他事务处理必须继续等待,直到提交或回退该事务处理为止。未请求这些行的其他事务处理可以立即请求并访问这些行。
要在 SQL Developer 中查看回退的效果,可能必须单击刷新图标。
作为示例 3-7 的结果,REGIONS 表包含一个称为“中东和非洲”的区域和一个称为“非”的区域。示例 3-8 会更正此问题(这是一个非常简单的事务处理)并检查更改,但接着回退事务处理,然后检查回退。
示例 3-8 回退整个事务处理
在事务处理之前:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
结果:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
事务处理 (更改表):
UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';
结果:
1 row updated.
检查更改:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
结果:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
回退事务处理:
ROLLBACK;
结果:
Rollback complete.
检查回退:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
结果:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
另请参阅:Oracle Database SQL Language Reference(了解有关 ROLLBACK 语句的信息)