控制隔離數據以供一個進程使用並防止其它進程干擾的程度的事務屬性。設置隔離級別定義了 SQL Server 會話中所有 SELECT 語句的默認鎖定行爲。
當多個事務同時進行時,通過設置隔離級別來處理髒讀、不可重複讀、幻讀事件
read uncommitted | 0 未提交讀
將查詢的隔離級別指定爲 0。
可以讀髒數據
讀髒數據:一事務對數據進行了增刪改,但未提交,有可能回滾,另一事務讀取了回滾前的數據
read committed | 1 已提交讀
將查詢的隔離級別指定爲 1。
避免髒讀,但可以出現不可重複讀和幻讀
不可重複讀:一事務對數據進行了更新或刪除操作,另一事務兩次查詢的數據不一致
幻像讀:一事務對數據進行了新增操作,另一事務兩次查詢的數據不一致
repeatable read | 2 可重複讀
將查詢的事務隔離級別指定爲 2。
避免髒讀,不可重複讀,允許幻像讀
serializable | 3 可序列化
將查詢的隔離級別指定爲 3。
串行化讀,事務只能一個一個執行,避免了髒讀、不可重複讀、幻讀
執行效率慢(我遇到過一種情況,用時是隔離級別1的30倍),使用時慎重
SNAPSHOT
當讀取數據時,可以保證讀操作讀取的行是事務開始時可用的最後提交版本。
這意味着這種隔離級別可以保證讀取的是已經提交過的數據,並且可以實現可重複讀,
也能確保不會幻讀。不過這種隔離級別使用的不是共享鎖,而是行版本控制。
SQL Server 2005以後的版本支持。