3、數據庫隔離級別以及悲觀鎖和樂觀鎖

數據庫隔離級別

目的:保證事務併發讀取數據的正確性

數據庫事務隔離級別

(1)Read uncommitted(讀未提交數據):允許事務讀取未被其他事務提交的變更數據,會出現髒讀、不可重複讀和虛讀。

(2)Read committed(讀已提交數據):只允許事務讀取已經被其他事務提交的變更數據,可避免髒讀,仍會有不可重複讀和虛讀

(3)Repeatable read(可重複讀):確保事務可以多次從一個字段中讀取相同的值,在此事務持續期間,禁止其他事務對此字段的更新,可避免髒讀、不可重複讀仍會有虛讀。

(4)Serializable(序列化):確保事務可以從一個表中讀取相同的行,在事務持續期間,禁止其他事務對該表執行插入、更新和刪除操作,可避免所有併發問題,但性能低。

MySQL支持四種事務隔離級別,其中REPEATABLE READ爲默認事務隔離級別。

 

設置說明:隔離級別越高,越能保證數據的完整性和一致性,但對併發性的影響越大。對於大多數應用程序,數據庫系統的隔離級別設爲ReadCommitted。能避免髒讀取,而且具有較好的併發性能。對於不可重複讀、虛讀和第二類丟失更新這些併發問題,採用悲觀鎖樂觀鎖。

悲觀鎖和樂觀鎖

悲觀鎖:每次拿數據時怕別人會修改,所以都會先上鎖,當其他事務要訪問該數據時就會阻塞。一般用在表鎖、行鎖、讀鎖和寫鎖,在操作前先上鎖。

樂觀鎖:每次拿數據時認爲別人不會修改,不會上鎖,但在更新時會先判斷一下在此期間別人是否有更新該數據,可以使用版本號等機制。

適用於:讀取多、寫少的情況,可以提高吞吐量。

DB2事務隔離級別:

1Uncommitted readUR——未提交讀)

讀取數據時,對錶加IN表鎖,而不會對數據行加鎖。修改數據時,則在數據上加X鎖以及相應表級別鎖(修改操作與CS處理相同)。

併發性:丟失更新、髒讀、不可重複讀和虛讀都有可能發生

(2)Cursor stabilityCS——遊標穩定性)默認級別:僅鎖住當前處理的記錄

鎖定遊標定位的當前行。讀取加NS鎖,修改加X鎖,帶有修改的查詢加U鎖。鎖定持續到讀取下一條或事務結束。

併發性:丟失更新和髒讀不會發生;但有可能出現不可重複讀和虛讀。

(3)Read statilityRS——讀穩定性)

只是鎖定事務實際檢索和修改的行(讀取的話加NS,修改的話加X,有修改意向加U

併發性:丟失更新、髒讀、不可重複讀不會發生;但有可能出現虛讀。

(4)Repeatable readRR

會對select的所有行加鎖,對所有掃描的行加鎖

併發性:丟失更新、髒讀、不可重複讀和虛讀都不會發生

 

發佈了77 篇原創文章 · 獲贊 44 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章