Dav*_*ave 11 sql t-sql sql-server sql-server-2005 isolation-level
我的理解是,当在SELECT语句中使用NOLOCK时,它也可以读取未提交的/脏行.但我想利用表上的NOLOCK提示,以便我的SELECT查询能够快速运行.
现在,NOLOCK在桌上但是与"SET TRANSACTION ISOLATION LEVEL READ COMMITTED"一起给我NOLOCK优势和更快的SELECT查询(因为NOLOCK)只有提交的行(因为SET)?
SQL*_*ace 18
是的,表提示会覆盖隔离级别设置,因此您仍会获得脏读
容易测试
先运行这个
create table bla(id int)
insert bla values(1)
begin tran
select * from bla with (updlock, holdlock)
Run Code Online (Sandbox Code Playgroud)
确保不提交tran !! 打开另一个窗口并运行它
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
select * from bla -- with (nolock)
Run Code Online (Sandbox Code Playgroud)
你什么也得不回来.
打开另一个窗口并立即运行
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
select * from bla with (nolock)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,你会回到这一行
BTW,READ COMMITTED是默认的隔离级别,无需设置它
查看快照隔离,它不会返回脏数据,但仍然无法锁定
| 归档时间: |
|
| 查看次数: |
44039 次 |
| 最近记录: |