WITH(NOLOCK)和WITH(READPAST) 的区别
select * from dbo.test2
select * from dbo.test2 WITH(NOLOCK)
select * from dbo.test2 WITH(READPAST)
这3个SQL 语句有什么区别呢,我在SQL 2005里面测试了下
在一个窗口 执行
begin transaction
insert into dbo.test2(ID,[Name])values(8,'fe')
然后另外一个窗口依次执行
(1)select * from dbo.test2 : 结果 等待
(2)select * from dbo.test2 WITH(NOLOCK) 结果 8,'fe'记录被查询出来了
(3)select * from dbo.test2 WITH(READPAST) 结果 8,'fe'记录没被查询出来了
分析: 从(1) 可以看出 产生了等待,等待的原因是事务里面有 插入语句,是被锁定了的,因为 select 默认是查询所有的记录。
从 (2)可以看出 ,还没有被提交的记录 也被查询出来了
(3) 只是查询 提交了的记录