PostgreSQL事務原理

一、事務的一些重要性質

事務是所有數據庫系統的基礎概念。

事務最重要的一點是它將多個步驟捆綁成了一個單一的、要麼全完成要麼全不完成的操作。步驟之間的中間狀態對於其他併發事務不可見的,並且如果有某些錯誤發生導致事務不能完成則其中任何一個步驟都不會對數據庫造成影響。即:

1、一個事務被稱爲是原子的:從其他事務的角度來看,它要麼整個發生要麼完全不發生。

2、一個事務型數據庫保證一個事務在被報告爲完成之前它所做的所有更新都被記錄在持久存儲(即磁盤)。

事務型數據庫的另一個重要性質與原子更新的概念緊密相關:當多個事務併發運行時,每一個都不能看到其他事務未完成的修改所以事務的全做或全不做並不只體現在它們對數據庫的持久影響,也體現在它們發生時的可見性。一個事務所做的更新在它完成之前對於其他事務是不可見的,而之後所有的更新將同時變得可見。

二、PostSQL中的事務

PostgreSQL實際上將每一個SQL語句都作爲一個事務來執行。如果我們沒有發出BEGIN命令,則每個獨立的語句都會被加上一個隱式的BEGIN以及(如果成功)COMMIT來包圍它。 一組被BEGIN和COMMIT包圍的語句也被稱爲一個事務塊。值得注意的是,某些客戶端庫會自動發出BEGIN和COMMIT命令,因此我們可能會在不被告知的情況下得到事務塊的效果。具體請查看所使用的接口文檔。

也可以利用保存點來以更細的粒度來控制一個事務中的語句。保存點允許我們有選擇性地放棄事務的一部分而提交剩下的部分。在使用SAVEPOINT定義一個保存點後,我們可以在必 要時利用ROLLBACK TO回滾到該保存點。該事務中位於保存點和回滾點之間的數據庫修改都會被放棄,但是早於該保存點的修改則會被保存。

在回滾到保存點之後,它的定義依然存在,因此我們可以多次回滾到它。反過來,如果確定不再需要回滾到特定的保存點,它可以被釋放以便系統釋放一些資源。記住不管是釋放保存點還是回滾到保存點都會釋放定義在該保存點之後的所有其他保存點

所有這些都發生在一個事務塊內,因此這些對於其他數據庫會話都不可見。當提交整個事務塊時,被提交的動作將作爲一個單元變得對其他會話可見,而被回滾的動作則永遠不會變得可見。

另外,在一個事務塊中使用保存點存在很多種控制可能性。以及,使用ROLLBACK TO唯一重新控制一個由於錯誤被系統置爲中斷狀態的事務塊途徑,而不是完全回滾它並重新啓動。 

三、關鍵字

原子性、保存點、中間狀態、可見性與不可見性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章