控制由連接發(fā)出的所有 Microsoft® SQL Server™ SELECT 語句的默認事務鎖定行為。
SET TRANSACTION ISOLATION LEVEL
{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}
READ COMMITTED
指定在讀取數(shù)據(jù)時控制共享鎖以避免
READ UNCOMMITTED
執(zhí)行臟讀或 0 級隔離鎖定,這表示不發(fā)出共享鎖,也不接受排它鎖。當設置該選項時,可以對數(shù)據(jù)執(zhí)行未提交讀或臟讀;在事務結(jié)束前可以更改數(shù)據(jù)內(nèi)的數(shù)值,行也可以出現(xiàn)在數(shù)據(jù)集中或從數(shù)據(jù)集消失。該選項的作用與在事務內(nèi)所有語句中的所有表上設置 NOLOCK 相同。這是四個隔離級別中限制最小的級別。
REPEATABLE READ
鎖定查詢中使用的所有數(shù)據(jù)以防止其他用戶更新數(shù)據(jù),但是其他用戶可以將新的幻像行插入數(shù)據(jù)集,且幻像行包括在當前事務的后續(xù)讀取中。因為并發(fā)低于默認隔離級別,所以應只在必要時才使用該選項。
SERIALIZABLE
在數(shù)據(jù)集上放置一個范圍鎖,以防止其他用戶在事務完成之前更新數(shù)據(jù)集或?qū)⑿胁迦霐?shù)據(jù)集內(nèi)。這是四個隔離級別中限制最大的級別。因為并發(fā)級別較低,所以應只在必要時才使用該選項。該選項的作用與在事務內(nèi)所有 SELECT 語句中的所有表上設置 HOLDLOCK 相同。
一次只能設置這些選項中的一個,而且設置的選項將一直對那個連接保持有效,直到顯式更改該選項為止。這是默認行為,除非在語句的 FROM 子句中在表級上指定優(yōu)化選項。
SET TRANSACTION ISOLATION LEVEL 的設置是在執(zhí)行或運行時設置,而不是在分析時設置。
下例為會話設置 TRANSACTION ISOLATION LEVEL。對于每個后續(xù) Transact-SQL 語句,SQL Server 將所有共享鎖一直控制到事務結(jié)束為止。
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors
...
COMMIT TRANSACTION
相關文章