事務之保存點(savepoint)

如果開啓一個事務,已經寫了很多語句,突然發現執行完上一語句時發現語句寫錯了。你只好使用rollback語句讓數據庫恢復到事務開啓之前的狀態。以前寫完的語句也需要重新執行。所以mysql數據庫的作者提出了保存點(savepoint)的概念。開啓事務後在執行語句後面打幾個點,我們調用rollback語句就會回滾到指定的點。而不是回到事務執行之前的樣子。

定義保存點的語法如下:

SAVEPOINT 保存點的名稱;

當我們想回滾到某個保存點時,可以使用下邊的語句。(WORK和SAVEPOINT可有可無)

ROLLBACK [WORK] TO [SAVEPOINT]

不過如果rollback後面不跟保存點的名稱,事務就會回滾到執行之前的狀態。

如果想刪除某個保存點可以使用下面的語句。

RELEASE SAVEPOINT 保存點名稱;

下面舉個例子來說明保存點的用法。張三向貓爺轉賬2塊錢。在執行完扣除張三2塊錢處打一個保存點。

select * from account;
id name balance
1 狗哥 11
2 貓爺 2
3 張三 10

 

 

 

 

 

#開啓事務
begin;

update account set balance =balance-2 where id=3;


savepoint s1; #一個保存點


select * from account;

id name balance
1 狗哥 11
2 貓爺 2
3 張三 8

 

 

 

 

 

 UPDATE account SET balance = balance + 1 WHERE id = 2; #更新錯了

回滾事務到保存點;

rollback to s1; #回滾到保存點


select * from account;
id name balance
1 狗哥 11
2 貓爺 2
3 張三 10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章