資料庫的髒讀、不可重複讀取、幻讀

來源:互聯網
上載者:User

標籤:

文章來源:http://www.bkjia.com/sjkjc/806530.html

資料庫的髒讀、不可重複讀取、幻讀都和事務的隔離性有關。所以先瞭解一下事務的4大特性。

事務的4大特性(ACID):
  1. 原子性(Atomicity):事務是資料庫的邏輯工作單位,它對資料庫的修改要麼全部執行,要麼全部不執行。
  2. 一致性(Consistemcy):事務前後,資料庫的狀態都滿足所有的完整性條件約束。
  3. 隔離性(Isolation):並發執行的N個事務是隔離的,一個不影響一個,一個事務在沒有commit之前,被修改的資料不可能被其他事務看到(通過設定資料庫的隔離等級)。
  4. 持久性(Durability):持久性意味著當系統或介質發生故障時,確保已提交事務的更新不能丟失。持久性主要在於DBMS的恢複效能。
髒讀:

髒讀又稱無效資料讀出。一個事務讀取另外一個事務還沒有提交的資料叫髒讀。

例如:事務T1修改了一行資料,但是還沒有提交,這時候事務T2讀取了被事務T1修改後的資料,之後事務T1因為某種原因Rollback了,那麼事務T2讀取的資料就是髒的。

解決辦法:把資料庫的交易隔離等級調整到READ_COMMITTED

不可重複讀取:

不可重複讀取是指在同一個事務內,兩個相同的查詢返回了不同的結果。

例如:事務T1讀取某一資料,事務T2讀取並修改了該資料,T1為了對讀取值進行檢驗而再次讀取該資料,便得到了不同的結果。

解決辦法:把資料庫的交易隔離等級調整到REPEATABLE_READ

幻讀:

幻讀。例如:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣。這就叫幻讀。

解決辦法:把資料庫的交易隔離等級調整到SERIALIZABLE_READ

髒讀、不可重複讀取、幻讀的層級高低是:髒讀 < 不可重複讀取 < 幻讀。所以,設定了最進階別的SERIALIZABLE_READ就不用在設定REPEATABLE_READ和READ_COMMITTED了

資料庫的髒讀、不可重複讀取、幻讀

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.