事務中savepoint(保存點)的使用


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> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM