,這是爲什麼,與SQL Server(所以事務隔離級別=提交讀)默認設置,這個測試:解釋在SQL Server的鎖定行爲
CREATE TABLE test2 (
ID bigint,
name varchar(20)
)
然後在一個SSMS運行此標籤:
begin transaction SH
insert into test2(ID,name) values(1,'11')
waitfor delay '00:00:30'
commit transaction SH
,這一次同時在另一個標籤:
select * from test2
需要第二個選擇等待第一個完成之前返回??
我們也嘗試了這些用於第二查詢:
select * from test2 NOLOCK WHERE ID = 1
,並試圖在第一個查詢插入一個ID和在所述第二選擇不同的ID。
這是頁面鎖定的結果嗎?當運行2個查詢,我也跑了這一點:
select object_name(P.object_id) as TableName, resource_type, resource_description
from
sys.dm_tran_locks L join sys.partitions P on L.resource_associated_entity_id = p.hobt_id
,並得到這個結果集:
test2的RID 1:12186:5
test2的RID 1:12186:5
TEST2 PAGE 1:12186
TEST2 PAGE 1:12186
您使用的是什麼版本的SQL Server?從2000年起,SQL Server默認使用行級鎖 - 而不是頁鎖。 – 2010-03-06 21:25:14