我使用
sql Server 2012.
我写了两个查询,但NOLOCK和UnCommitted之间有什么区别?
SELECT lastname,firstname
FROM HR.Employees with (READUNCOMMITTED)
SELECT lastname,firstname
FROM HR.Employees with (NoLock)
NOLOCK:相当于READUNCOMMITTED(来源:
MSDN)
NOLOCK或READUNCOMMITTED指定允许脏读.不会发出共享锁,以防止其他事务修改当前事务读取的数据,而由其他事务设置的独占锁定不会阻止当前事务读取锁定的数据.允许脏读取可能导致更高的并发性,但是以读取数据修改为代价,然后被其他事务回滚
READUNCOMMITTED和NOLOCK提示仅适用于数据锁.所有查询(包括具有READUNCOMMITTED和NOLOCK提示的查询)在编译和执行期间获取Sch-S(模式稳定性)锁.因此,当并发事务在表上保存Sch-M(模式修改)锁时,查询被阻止