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