回答

收藏

NOLOCK和UNCOMMITTED有什么区别

技术问答 技术问答 486 人阅读 | 0 人回复 | 2023-09-14

我使用SQL Server 2012。! m: e; N# [& j: e3 _  @! D1 f  F$ x
我写了两个查询,但是NOLOCK和之间有什么不同UnCommitted?1 J$ {8 T  e9 n$ G5 {8 _7 r; u
SELECT lastname, firstname
! E) k& Y/ \8 G9 a0 rFROM HR.Employees with (READUNCOMMITTED)
  L8 ^: x1 k; o; d: C$ ASELECT lastname, firstname % v1 B4 e+ R) I# e" m0 X8 G9 Y
FROM HR.Employees with (NoLock)1 a1 B" M6 x* V7 q, v! F' Y
                : [) m- y+ g+ Y+ {* C: R
解决方案:) A. ~2 P/ {& F- v* U4 b5 ?4 x  a! O
                " \( v- `$ V. y7 ?
( L/ t" S5 E! d) u; W. G0 y! @

% p% J: d6 o' ~7 f                NOLOCK: 相当于READ UNCOMMITTED(来源: MSDN" k7 l4 _$ S2 T. m9 S& k: Q
NOLOCK或READ: x8 T9 b8 a0 |* ~
UNCOMMITTED指定允许脏读取。没有发出共享锁来防止其他事务修改当前事务读取的数据,并且其他事务设置的互斥锁不会阻止当前事务读取锁定的数据。允许脏读取可能会导致更高的并发性,但代价是读取数据修改,然后其他事务将其回滚
" t' t- n' B* j, n2 @. hREAD UNCOMMITTED并NOLOCK提示仅适用于数据锁。所有查询(包括那些with READ UNCOMMITTED and; u( y; ~: i- b  L) k
NOLOCK提示)在编译和执行期间均获得Sch-S(模式稳定性)锁。因此,当并发??事务在表上持有Sch-M(架构修改)锁时,查询将被阻止
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则