摘抄自:http://www.cnblogs.com/wzcheng/archive/2006/10/18/532243.html

設置事務的級別 SET TRANSACTION ISOLATION LEVEL
A、READ COMMITTED :指定在讀取數據時控制共享鎖以避免臟讀,但數據可在事務結束前更改,從而產生不可重復讀取或幻像數據。該選項是 SQL Server 的默認值。
B、READ UNCOMMITTED:執行臟讀或 0 級隔離鎖定,這表示不發出共享鎖,也不接受排它鎖。當設置該選項時,可以對數據執行未提交讀或臟讀;在事務結束前可以更改數據內的數值,行也可以出現在數據集中或從數據集消失。這是四個隔離級別中限制最小的級別。
C、REPEATABLE READ:鎖定查詢中使用的所有數據以防止其他用戶更新數據,但是其他用戶可以將新的幻像行插入數據集,且幻像行包括在當前事務的后續讀取中。因為并發低于默認隔離級別,所以應只在必要時才使用該選項。
D、SERIALIZABLE:在數據集上放置一個范圍鎖,以防止其他用戶在事務完成之前更新數據集或將行插入數據集內。這是四個隔離級別中限制最大的級別。因為并發級別較低,所以應只在必要時才使用該選項。該選項的作用與在事務內所有 SELECT 語句中的所有表上設置 HOLDLOCK 相同。
注釋
一次只能設置這些選項中的一個,而且設置的選項將一直對那個連接保持有效,直到顯式更改該選項為止。這是默認行為,除非在語句的 FROM 子句中在表級上指定優化選項。
SET TRANSACTION ISOLATION LEVEL 的設置是在執行或運行時設置,而不是在分析時設置。

術語解釋:

在一個程序中,依據事務的隔離級別將會有三種情況發生。
  
  ◆臟讀:一個事務會讀進還沒有被另一個事務提交的數據,所以你會看到一些最后被另一個事務回滾掉的數據。

  ◆ 讀值不可復現:一個事務讀進一條記錄,另一個事務更改了這條記錄并提交完畢,這時候第一個事務再次讀這條記錄時,它已經改變了。

  ◆ 幻影讀:一個事務用Where子句來檢索一個表的數據,另一個事務插入一條新的記錄,并且符合Where條件,這樣,第一個事務用同一個where條件來檢索數據后,就會多出一條記錄。

(以上文章摘自網絡)

結合以上的理論知識,將IsolationLevel枚舉的各值解釋如下:

ReadCommitted:
假設A事務對正在讀取數據Data放置了共享鎖,那么Data不能被其它事務改寫,所以當B事務對Data進行讀取時總和A讀取的Data數據是一致的,所以避免了臟讀。由于在A沒有提交之前可以對Data進行改寫,那么B讀取到的某個值可能會在其讀取后被A更改從而導致了該值不能被重復取得;或者當B再次用相同的where字句時得到了和前一次不一樣數據的結果集,也就是幻像數據。

ReadUncommitted:
假設A事務即不發布共享鎖,也不接受獨占鎖,那么并發的B或者其它事務可以改寫A事務讀取的數據,那么并發的C事務讀取到的數據的狀態和A的或者B的數據都可能不一致,那么。臟讀、不可重復讀、幻象數據都可能存在。

RepeatableRead:
(注意MSDN原文中的第一句話:在查詢中使用的所有數據上放置鎖,所以不存在臟讀的情況)。
假設A事務對讀取的所有數據Data放置了鎖,以阻止其它事務對Data的更改,在A沒有提交之前,新的并發事務讀取到的數據如果存在于Data中,那么該數據的狀態和A事務中的數據是一致的,從而避免了不可重復的讀取。但在A事務沒有結束之前,B事務可以插入新記錄到Data所在的表中,那么其它事務再次用相同的where字句查詢時,得到的結果數可能上一次的不一致,也就是幻像數據。

Serializable:
 在數據表上放置了排他鎖,以防止在事務完成之前由其他用戶更新行或向數據集中插入行,這是最嚴格的鎖。它防止了臟讀、不可重復讀取和幻象數據。

以下是對照表:

隔離級別 臟讀(Dirty Read) 不可重復讀(NonRepeatable Read) 幻讀(Phantom Read)
讀未提交(Read uncommitted) 可能 可能 可能
讀已提交(Read committed) 不可能 可能 可能
可重復讀(Repeatable read) 不可能 不可能 可能
可串行化(Serializable ) 不可能 不可能 不可能