SQL Server有哪幾種隔離級別

2021-08-22 08:29:47 字數 2054 閱讀 8237

事隔離級別用於控制併發使用者如何控制併發使用者讀寫的操作。讀操作可以是任何檢索資料的語句,預設使用共享鎖。寫操作是指任何對錶進行修改的語句,需要使用排他鎖。

可以設定的隔離級別有6個:read uncommitted(未提交讀),read committed(可提交讀),repeatable read(可重複讀),serializable(可序列化),snapshot(快照),以及read committed snapshot(已經提交隔離)。

獲取事務隔離級別(isolation level)

dbcc

useroptions

設定隔離級別

set transaction isolation level

--注意:在設定回話隔離時(repeatable read)兩個單詞需要用空格間隔開,但是在表隔離中可以粘在一起(repeatableread)

設定查詢表隔離

select ....from with ()

隔離級別越高,一致性越高,併發性越低

read uncommitted(未提交讀)

未提交讀是最低的隔離級別,在這個級別執行的事務,讀操作不會請求共享鎖。如果讀操作不請求共享鎖,就絕對不會和排他鎖的寫操作發生衝突。這意味這讀操作也能讀取未提交的修改(也稱為髒讀)。

read committed(已提交讀)

如果想避免讀取未提交的修改,則需要使用要求更高的隔離級別。能夠防止髒讀的最低級別是

read committed,這也是sql server預設使用的隔離級別。這個隔離解綁只允許讀取已經提價過的修改。它要求讀操作必須獲得共享鎖才能進行,從而防止讀取未提交的修改。

在該級別中,讀操作一旦完成,就立即釋放共享鎖。他不會在事務持續期間保留它;這意味著在乙個事務中間對相同資料資源的兩次訪問,沒有共享鎖會鎖定該資源。因此,其他事務可以在兩個讀操作之間修改資源,讀操作也有可能每次取到不同的值。這種現象稱為不可重複讀(non-repeatable read)或不一致分析(inconsistent analysis)。

repeatable read(可重複讀)

如果想保證在事務內進行的兩個讀操作之間,其他任何事務都不能修改有當前事務讀取的資料,則需要把隔離級別設定為repeatable read。在這種隔離級別下,事務中的讀操作不但需要獲得共享鎖才能讀取操作,而且獲得的共享鎖將一直保持到事務結束。

repeatable read隔離級別能夠防止的另一種併發負面影響是丟失更新(lost update),而較低的隔離級別不能防止此問題。丟失更新是指兩個事務同時讀取了同乙個值,然後基於最初讀取的值進行計算,接著再更新該值,這樣最後提交的事務是「贏家」。覆蓋其他事務所做的更新,這將導致事務丟失。

在repeatable read隔離級別下執行的事務,讀操作會一直持有共享鎖直到事務結束。但是事務只鎖定第乙個執行時找到的哪些資料資源,而不會鎖定查詢結果範圍以外的其他行。因此,在同一事務進行第二次讀取之前,如果其他事務插入了新行,而且新行也能滿足讀操作的查詢過濾條件,那麼這些新行也會出現第二次讀取操作返回的結果中。這些新行稱為幻影(phantom),這種讀操作稱為幻讀(phantom read)。

serializable (可序列化)

為了避免幻讀,需要將隔離級別設定為serializable級別 ,它和repeatable read類似:即讀操作需要獲得共享鎖才能讀取資料,並保留共享鎖直到事務結束。不過serializable隔離級別增加乙個新內容-------邏輯上,這個隔離級別會讓讀操作鎖定滿足搜尋條件的鍵整個範圍。這就意味著讀操作不僅鎖定了滿足條件的那些行,還鎖定了未來可能滿足搜尋條件的行。

vi有哪幾種模式

vi有三種工作模式,分別是 1 命令模式,是啟動vi後進入的工作模式,並可轉換為文字編輯模式和最後行模式 2 文字編輯模式,用於字元編輯 3 最後行模式。vi有三種工作模式 命令模式 文字編輯模式和最後行模式。不同工作模式下的操作方法有所不同。1 命令模式 命令模式是啟動vi後進入的工作模式,並可轉...

面試 架構 集群有哪幾種

前言 我們在做專案的時候經常會用到集群,在面試的時候也經常會問到你們有沒有用集群,怎麼部署的。無論你是 web容器集群還是db集群,按照所要解決的問題可以分為如下幾種 平行計算或稱平行計算是相對於序列計算來說的 平行計算的能力的目的是提高計算速度。平行計算分為時間計算和空間計算 時間計算既是流水線技...

css定位有哪幾種方式?

相信很多的初學者和我一樣在剛接觸有關浮動和定位都有些搞不清楚,在這裡我將介紹一下我所理解的有關 css的定位方式。在css中浮動主要是解決一些有關布局的左右排列問題,其實定位的作用和浮動的作用差不多,不過區 別是定位用來解決疊加排列的問題。在用定位時,你需要寫position屬性,position ...