,这是为什么,与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