好記性不如爛筆頭23-資料庫事務(1),筆頭23-

來源:互聯網
上載者:User

好記性不如爛筆頭23-資料庫事務(1),筆頭23-


資料庫事務(Database Transaction),是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。交易處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為一個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢複並使應用程式更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。事務是資料庫運行中的一個邏輯工作單位,由DBMS中的交易管理子系統負責事務的處理。

事務,在我們日常的互連網購物、銀行存取款等日常生活中,處處存在。

一個常見的例子,A銀行有200塊錢,B銀行只有100塊。

A給B轉賬50塊,A只剩下150塊,B有了150塊。(預期情況)

如果A轉了錢,B沒有收到;錢那裡去了?

如果A轉了錢,B收到了,但是A的錢沒有提交;B又給A轉回來50塊? 誒,怎麼錢多了?

 有無數的不可預期的情況發生….

1、事務的四大特性(ACID)

原子性(Atomicity)

原子性是指事務是一個不可分割的工作單位,事務中的操作要麼全部成功,要麼全部失敗。比如在同一個事務中的SQL語句,要麼全部執行成功,要麼全部執行失敗

一致性(Consistency)

事務必須使資料庫從一個一致性狀態變換到另外一個一致性狀態。以轉賬為例子,A向B轉賬,假設轉賬之前這兩個使用者的錢加起來總共是2000,那麼A向B轉賬之後,不管這兩個賬戶怎麼轉,A使用者的錢和B使用者的錢加起來的總額還是2000,這個就是事務的一致性。

隔離性(Isolation)

事務的隔離性是多個使用者並發訪問資料庫時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作資料所幹擾,多個並發事務之間要相互隔離。

持久性(Durability)

持久性是指一個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

 

2、常見的並行作業帶來的資料不一致性

如果沒有鎖定且多個使用者同時訪問一個資料庫,則當他們的事務同時使用相同的資料時可能會發生問題。由於並行作業帶來的資料不一致性包括:遺失資料修改、讀”髒”資料(髒讀)、不可重複讀取、產生幽靈資料。

(1)遺失資料修改

當兩個或多個事務選擇同一行,然後基於最初選定的值更新該行時,會發生丟失更新問題。每個事務都不知道其它事務的存在。最後的更新將重寫由其它事務所做的更新,這將導致資料丟失。如上例。

再例如,兩個編輯人員編輯同一個詞條。每個編輯人員獨立地更改其複本,然後儲存更改後的複本,這樣就覆蓋了原始文檔。最後儲存的編輯人員覆蓋了第一個編輯人員所做的更改。如果在第一個編輯人員完成之後第二個編輯人員才能變更,則可以避免該問題。

(2)讀“髒”資料(髒讀)

讀“髒”資料是指事務T1修改某一資料,並將其寫回磁碟,事務T2讀取同一資料後,T1由於某種原因被除撤消,而此時T1把已修改過的資料又恢複原值,T2讀到的資料與資料庫的資料不一致,則T2讀到的資料就為“髒”資料,即不正確的資料。

例如:一個編輯人員正在更改詞條。在更改過程中,另一個編輯人員複製了該文檔(該複本包含到目前為止所做的全部更改)並將其分發給預期的使用者。此後,第一個編輯人員認為詞條是錯誤的,於是刪除了新修改的文檔。但是分發給使用者的文檔包含不再存在的內容。不讀沒有最終確認的詞條,則可以避免該問題。

( 3)不可重複讀取

不可重複讀取指在一個事務內讀取表中的某一行資料,多次讀取結果不同。

例如銀行想查詢A帳戶餘額,第一次查詢A帳戶為200元,此時A向帳戶記憶體了100元並提交了,銀行接著又進行了一次查詢,此時A帳戶為300元了。銀行兩次查詢不一致,可能就會很困惑,不知道哪次查詢是準的。

不可重複讀取和髒讀的區別是,髒讀是讀取前一事務未提交的髒資料,不可重複讀取是重新讀取了前一事務已提交的資料。

不可重複讀取不是一個技術性的問題,要解決這個問題,關鍵是要確保事情的一致性。比如銀行程式需要將查詢結果分別輸出到電腦螢幕和寫到檔案中,如果在這一瞬間資料發生了變化,電腦螢幕和檔案的資料不一致了。資料是切切實實的發生了變化,但是如果我們要做的事情是一個事情。比如先在電腦螢幕面前查看,然後列印;那麼就要把輸出到電腦螢幕上的內容進行列印,而不是再次從資料庫中擷取最新的資料進行列印。

(4)產生幽靈資料

T1按一定條件從資料庫中讀取了某些記錄後,T2刪除了其中部分記錄,當T1再次按相同條件讀取資料時,發現某些記錄消失

T1按一定條件從資料庫中讀取某些資料記錄後,T2插入了一些記錄,當T1再次按相同條件讀取資料時,發現多了一些記錄。

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.