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

數據庫隔離級別數據庫

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

數據庫事務隔離級別

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

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

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

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

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

 

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

 

悲觀鎖和樂觀鎖序列化

悲觀鎖:每次拿數據時怕別人會修改,因此都會先上鎖,當其餘事務要訪問該數據時就會阻塞。通常用在表鎖、行鎖、讀鎖和寫鎖,在操做前先上鎖。程序

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

適用於:讀取多、寫少的狀況,能夠提升吞吐量。

DB2事務隔離級別:

(1)Uncommitted read(UR——未提交讀)

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

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

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

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

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

(3)Read statility(RS——讀穩定性)

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

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

(4)Repeatable read(RR)

會對select的全部行加鎖,對全部掃描的行加鎖

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

相關文章
相關標籤/搜索