資料庫交易隔離等級

來源:互聯網
上載者:User

一,事務的4個基本特徵 

Atomic(原子性): 
事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要 
麼全部成功,要麼全部失敗。 

Consistency(一致性): 
只有合法的資料可以被寫入資料庫,否則事務應該將其復原到最初 
狀態。 

Isolation(隔離性): 
事務允許多個使用者對同一個資料進行並發訪問,而不破壞資料的正 
確性和完整性。同時,並行事務的修改必須與其他並行事務的修改 
相互獨立。 

Durability(持久性): 
事務結束後,交易處理的結果必須能夠得到固化。 

以上屬於廢話 

二,為什麼需要對事務並發控制 

如果不對事務進行並發控制,我們看看資料庫並行作業是會有那些異常情形

Lost update: 
兩個事務都同時更新一行資料,但是第二個事務卻中途失敗退出, 
導致對資料的兩個修改都失效了。

Dirty Reads: 
一個事務開始讀取了某行資料,但是另外一個事務已經更新了此數 
據但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作 
都被復原。 

Non-repeatable Reads: 
一個事務對同一行資料重複讀取兩次,但是卻得到了不同的結果。 

Second lost updates problem: 
無法重複讀取的特例。有兩個並發事務同時讀取同一行資料,然後其 
中一個對它進行修改提交,而另一個也進行了修改提交。這就會造成 
第一次寫操作失效。 

Phantom Reads: 
事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查 
詢中未出現的資料(這裡並不要求兩次查詢的SQL語句相同)。這是 
因為在兩次查詢過程中有另外一個事務插入資料造成的。 

三, 資料庫的隔離等級 

為了兼顧並發效率和異常控制,在標準SQL規範中,定義了4個事務隔
離層級,(ORACLE和SQLSERER對標準隔離等級有不同的實現 )

Read Uncommitted: 
直譯就是"讀未提交",意思就是即使一個更新語句沒有提交,但是別 
的事務可以讀到這個改變.這是很不安全的. 

Read Committed: 
直譯就是"讀提交",意思就是語句提交以後即執行了COMMIT以後 
別的事務就能讀到這個改變. 

Repeatable Read: 
直譯就是"可以重複讀",這是說在同一個事務裡面先後執行同一個 
查詢語句的時候,得到的結果是一樣的. 

Serializable: 
直譯就是"序列化",意思是說這個事務執行的時候不允許別的事務 
並發執行. 

四,隔離等級對並發的控制
 

下表是各隔離等級對各種異常的控制能力:

 

 

  LU DR NRR SLU PR
RU N Y Y Y Y
RC N N Y Y Y
RR N N N N Y
S N N N N N

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.