savepoint概念:
首先要知道savepoint就是為回退做的,savepoint的個數沒有限制,savepoint和虛擬機中快照類似. savepoint是事務中的一點。用於取消部分事務,當結束事務時,會自動的刪除該事務中所定義的所有保存點。
當執行rollback時,通過指定保存點可以回退到指定的點。
回退事務的幾個重要操作
1.設置保存點 savepoint a
2.取消保存點a之后事務 rollback to a
3.取消全部事務 rollback
注意:這個回退事務,必須是沒有commit前使用的;
如果事務提交了,那么無論你剛才做了多少個保存點,都統統沒有。 如果沒有手動執行commit,而是exit退出會話了,那么會自動提交 。
開始實驗:創建savepoint還原點
SQL> set time on
SQL> create table test(aa varchar(9));
Table created
SQL> insert into test values(1);
1 row inserted
SQL> savepoint a1;
Savepoint created
SQL> select * from test;
AA
---------
1
SQL> insert into test values(2);
1 row inserted
SQL> savepoint a2;
Savepoint created
SQL> select * from test;
AA
---------
1
2
SQL> insert into test values(3);
1 row inserted
SQL> savepoint a3;
Savepoint created
SQL> select * from test;
AA
---------
1
2
3
SQL> insert into test values(4);
1 row inserted
SQL> savepoint a4;
Savepoint created
SQL> select * from test;
AA
---------
1
2
3
上面設置了4個保存點。
現在首先從第4個保存點后回退到第三個保存點
SQL> rollback to a3;
Rollback complete
SQL> select * from test;
AA
---------
1
2
3
從第3個保存點回退到第一個保存點,直接跳過了第2個保存點。第二個保存點無效。
SQL> rollback to a1;
Rollback complete
SQL> select * from test;
AA
---------
1
SQL> rollback to a2;
rollback to a2
ORA-01086: savepoint 'A2' never established in this session or is invalid
rollback將所有保存點或未提交事務都回退。
SQL> rollback;
Rollback complete
SQL> select * from test;
AA
---------
SQL>