W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
?SAVEPOINT
?語句用來實現(xiàn)事務的部分回滾。
SAVEPOINT
?:SAVEPOINT spname
SAVEPOINT
?:ROLLBACK [WORK] to [SAVEPOINT] spname
參數(shù) |
描述 |
---|---|
spname |
指定 |
假設一個事務執(zhí)行了如下語句:
sql_no |
語句 |
分區(qū) |
---|---|---|
1 |
update... |
p1, p4 |
savepoint sp1 |
||
2 |
update... |
p2, p4 |
3 |
update... |
p3, p5 |
savepoint sp2 |
||
4 |
update... |
p1, p3, p6 |
5 |
update... |
p1, p5 |
savepoint sp3 |
||
6 |
select... |
|
7 |
update... |
p5, p6 |
savepoint sp4 |
用戶在提交事務之前可以創(chuàng)建?SAVEPOINT
?,需要根據?SAVEPOINT
?創(chuàng)建的順序,將事務的?SAVEPOINT
?串成鏈表。以上事務包含了 7 條 SQL 和 4 個?SAVEPOINT
?,記錄?SAVEPOINT
?的鏈表如下圖所示,其中每個節(jié)點記錄了?<spname, sql_no>
?的映射關系:
事務為了支持回滾某條 SQL 之后的所有修改,需要將每條語句涉及的參與者以及對應的 ?sql_no
? 記錄下來,以上事務執(zhí)行了 7 條 SQL,涉及 p1~p6 共 6 個分區(qū):
SAVEPOINT
?鏈表查詢?spname
?對應的?sql_no
?假設用戶執(zhí)行?ROLLBACK to SAVEPOINT sp2
?,根據savepoint鏈表查詢到 sp2 對應的?sql_no
?為 3。sql_no
?對應的分區(qū)根據事務參與者列表查詢到?sql_no
?大于 3 的語句操作的分區(qū)涉及 p1、p3、p5、p6。sql_no
?大于 3 的操作信息從事務參與者列表中刪除,由于 p6上的所有修改都被回滾掉,因此 p6 可以從參與者列表中刪除。
ROLLBACK to SAVEPOINT sp2
?成功后,系統(tǒng)會刪除 sp3 和 sp4 的SAVEPOINT,不允許再回滾到 sp3 和 sp4。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: