回答

收藏

NOLOCK和UNCOMMITTED有什么区别

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

我使用SQL Server 2012。3 w  L8 ]1 b9 @, ?/ P: j
我写了两个查询,但是NOLOCK和之间有什么不同UnCommitted?
) X1 e3 b6 Z( |- m, _/ z8 f# ]SELECT lastname, firstname8 e. g, n  P) l( M& u; `4 }
FROM HR.Employees with (READUNCOMMITTED)& A2 f( [8 s1 C' F
SELECT lastname, firstname
6 u2 x! @# M; t9 z) J% UFROM HR.Employees with (NoLock)
% E* O0 p" ^  o& {  g9 u               
2 j$ w7 `9 S: @解决方案:% r  E3 l  M" v7 d5 t! f
               
( S) \* q+ m& Y' y( g4 C
1 ?8 h: V+ p5 H$ I7 m8 V3 p4 {6 F6 u- k& ^
                NOLOCK: 相当于READ UNCOMMITTED(来源: MSDN
5 {4 s8 n: F9 @' NNOLOCK或READ  y4 ?  p9 i1 _2 x; K4 `" U  K
UNCOMMITTED指定允许脏读取。没有发出共享锁来防止其他事务修改当前事务读取的数据,并且其他事务设置的互斥锁不会阻止当前事务读取锁定的数据。允许脏读取可能会导致更高的并发性,但代价是读取数据修改,然后其他事务将其回滚2 D# }0 L" A$ a+ G
READ UNCOMMITTED并NOLOCK提示仅适用于数据锁。所有查询(包括那些with READ UNCOMMITTED and
% h' t! Q! f) y7 YNOLOCK提示)在编译和执行期间均获得Sch-S(模式稳定性)锁。因此,当并发??事务在表上持有Sch-M(架构修改)锁时,查询将被阻止
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则