事物的隔離級別

2021-07-26 03:57:40 字數 1943 閱讀 8610

sql 事務隔離級別

概述

隔離級別用於決定如果控制併發使用者如何讀寫資料的操作,同時對效能也有一定的影響作用。

步驟

事務隔離級別通過影響讀操作來間接地影響寫操作;可以在回話級別上設定事務隔離級別也可以在查詢(表級別)級別上設定事務隔離級別。

事務隔離級別總共有6個隔離級別:

read uncommitted(未提交讀,讀髒),相當於(nolock)

read committed(已提交讀,預設級別)

repeatable read(可以重複讀),相當於(holdlock)

serializable(可序列化)

snapshot(快照)

read committed snapshot(已經提交讀隔離)

對於前四個隔離級別:read uncommitted

隔離級別越高,讀操作的請求鎖定就越嚴格,鎖的持有時間久越長;所以隔離級別越高,一致性就越高,併發性就越低,同時效能也相對影響越大.

事務的隔離級別

sql server

通過在鎖資源上使用不同型別的鎖來隔離事務。為了開發安全的事務,定義事務內容以及應在何種情況下回滾至關重要,定義如何以及在多長時間內在事務中保持鎖定也同等重要。這由隔離級別決定。應用不同的隔離級別,

sql server

賦予開發者一種能力,讓他們為每乙個單獨事務定義與其他事務的隔離程度。事務隔離級別的定義如下: · 

是否在讀資料的時候使用鎖

· 讀鎖持續多長時間

· 在讀資料的時候使用何種型別的鎖

· 讀操作希望讀已經被其他事務排他鎖住的資料時,怎麼辦?在這種情況下,

sql server

可以:· 

一直等到其他事務釋放鎖

· 讀沒有提交的資料

· 讀資料最後提交後的版本

ansi 99

定義了4

種事務隔離級別,

sql server 2005

能夠完全支援這些級別: · 

未提交讀

在讀資料時不會檢查或使用任何鎖。因此,在這種隔離級別中可能讀取到沒有提交的資料。

· 已提交讀

只讀取提交的資料並等待其他事務釋放排他鎖。讀資料的共享鎖在讀操作完成後立即釋放。已提交讀是

sql server

的預設隔離級別。

· 可重複讀

像已提交讀級別那樣讀資料,但會保持共享鎖直到事務結束。

· 可序列化

工作方式類似於可重複讀。但它不僅會鎖定受影響的資料,還會鎖定這個範圍。這就阻止了新資料插入查詢所涉及的範圍,這種情況可以導致幻像讀。

此外,sql server

還有兩種使用行版本控制來讀取資料的事務級別

(本章後文將詳細檢驗這些隔離級別

)。行版本控制允許乙個事務在資料排他鎖定後讀取資料的最後提交版本。由於不必等待到鎖釋放就可進行讀操作,因此查詢效能得以大大增強。這兩種隔離級別如下: · 

已提交讀快照

它是一種提交讀級別的新實現。不像一般的提交讀級別,

sql server

會讀取最後提交的版本並因此不必在進行讀操作時等待直到鎖被釋放。這個級別可以替代提交讀級別。

· 快照

這種隔離使用行版本來提供事務級別的讀取一致性。這意味著在乙個事務中,由於讀一致性可以通過行版本控制實現,因此同樣的資料總是可以像在可序列化級別上一樣被讀取而不必為防止來自其他事務的更改而被鎖定。

無論定義什麼隔離級別,對資料的更改總是通過排他鎖來鎖定並直到事務結束時才釋放。

很多情況下,定義正確的隔離級別並不是乙個簡單的決定。作為一種通用的規則,要選擇在盡可能短的時間內鎖住最少資料,但同時依然可以為事務提供它所需的安全程度的隔離級別。

事物隔離級別

自然也是支援四種事務隔離級別的 read uncommitted,read commit,repeatable read serializable,下面就分別最四種隔離級別在實現的鎖機制做乙個簡介 serializable 1 這種隔離級別對資料的要求最為嚴格,自然也是效能最差的一種隔離級別。在所有...

事物隔離級別

隔離級別從松到緊 讀未提交,讀提交 重複讀,序列化。讀未提交 可能會出現髒讀的情況 例子 你去買5個包子。人多。店員拿的急多方乙個,袋子裡有6個,這個時候,你眼睛一瞟。心裡美滋滋。付錢的時候老闆檢查了一下,發現多了乙個,就拿走了乙個,然後你付錢走人 提交事務 這時候你就發現實際上袋子裡只有5個,但是...

事物隔離級別

在分布式的系統中,通常會有多個執行緒連線到資料庫中同時對乙個表進行操作 這裡的同時並不表示同乙個時間點,而是同時競爭cpu的資源,至於如何排程,就要看執行緒和作業系統如何進行排程了 這種情況下如果會話的事物設定不當,就會導致資料混亂,常常會出現以下三種情況 假設現在系統中有兩個會話a和b,同時對錶t...