MogDB/openGauss如何實現事務的rollback

openGaussbaby發表於2024-04-01

MogDB/openGauss 如何實現事務的 rollback
本文出處:https://www.modb.pro/db/113262

資料庫最主要的功能就是儲存資料,然而我們在進行資料庫操作時,卻很容易發生誤運算元據的情況,那麼在 MogDB 中該如何實現誤運算元據恢復呢?本文透過具體示例簡要介紹如何透過回滾還原到誤操作前的狀態。

使用 gsql 連線 MogDB 時,SQL 語句執行完畢會自動提交,我們可以透過開啟事務來避免誤操作。事務的提交與回滾體現事務的原子性特徵,事務語句要麼提交,要麼回滾。

準備工作:

登入資料庫。

示例步驟:

建立測試表並插入資料

create table test (id int,name char(10));
insert into test values(1,'aa');
insert into test values(2,'bb');
表中插入資料回滾

--檢視當前表中資料
select * from test;
--開啟事務並插入資料,之後回滾操作
begin;
insert into test values(3,'cc');
select * from test;
rollback;
--檢視insert已經回滾
select * from test;
透過上述示例可以看出,執行回滾之後,新插入的一行資料並未存入表中,更新和刪除操作也是同樣。

除此之外,事務執行過程中還可以建立儲存點,如果不指定儲存點,回滾操作會回滾到事務起始點,即 begin 開始的地方。在比較大的事務中,可以把執行過程分為幾個步驟,每個步驟執行完成後建立一個儲存點,後續步驟執行失敗時,可回滾到之前的儲存點,而不必回滾整個事務。

開啟事務,在上表中繼續插入資料,並建立兩個儲存點

begin;
insert into test values(3,'cc');
savepoint savepoint1;
insert into test values(4,'dd');
savepoint savepoint2;
insert into test values(5,'ee');
回滾至儲存點

--檢視當前表資料
select * from test;
--回滾到儲存點savepoint2,檢視資料
rollback to savepoint savepoint2;
select * from test;
--回滾到儲存點savepoint1,檢視資料
rollback to savepoint savepoint1;
select * from test;
提交事務,檢視資料

commit;
select * from test;
透過上述示例可以看出,回滾到儲存點 1 後,後續操作未提交,而儲存點 1 之前的操作會提交,即最終表中存有 3 行資料。

顯示開啟事務並利用回顧機制是一種能夠有效避免誤操作的方法。

相關文章