首頁  >  文章  >  資料庫  >  資料庫的交易隔離等級有哪些?

資料庫的交易隔離等級有哪些?

青灯夜游
青灯夜游原創
2019-06-12 17:08:3325398瀏覽

在資料庫操作中,為了有效保證並發讀取資料的正確性,所提出的事務隔離等級。在標準SQL規範中,定義了4個事務隔離級別,不同的隔離級別對事務的處理不同。以下這篇文章就來跟大家介紹一下事務隔離級別,希望對你們有幫助。

資料庫的交易隔離等級有哪些?

一般的資料庫,包括四種隔離級別,不同的隔離級別對交易的處理不同。

未授權讀取

也稱為讀取未提交(Read Uncommitted):允許髒讀取,但不允許更新遺失。如果一個事務已經開始寫數據,則另外一個事務則不允許同時進行寫入操作,但允許其他事務讀取此行數據。此隔離等級可以透過「排他寫鎖」來實現。

授權讀取

也稱為讀取提交(Read Committed):允許不可重複讀取,但不允許髒讀取。讀取資料的事務允許其他事務繼續存取該行數據,但是未提交的寫入事務將會禁止其他事務存取該行。可以透過「瞬間共享讀鎖」和「排他寫鎖」來實現。

可重複讀取(Repeatable Read)

禁止不可重複讀取和髒讀取,但有時可能出現幻讀資料。讀取資料的事務將會禁止寫入事務(但允許讀取事務),寫事務則禁止任何其他事務。可以透過「共享讀鎖」和「排他寫鎖」來實現。

序列化(Serializable)

提供嚴格的事務隔離。它要求事務序列化執行,事務只能一個接著一個執行,不能並發執行。僅透過「行級鎖」是無法實現事務序列化的,必須透過其他機制保證新插入的資料不會被剛執行查詢操作的事務存取。

隔離等級越高,越能保證資料的完整性和一致性,但是對並發效能的影響也越大。對於多數應用程序,可以優先考慮將資料庫系統的隔離等級設為Read Committed。它能夠避免髒讀取,而且具有較好的並發性能。儘管它會導致不可重複讀、幻讀和第二類丟失更新這些並發問題,在可能出現這類問題的個別場合,可以由應用程式採用悲觀鎖或樂觀鎖來控制。

以上是資料庫的交易隔離等級有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn