回答

收藏

NOLOCK和UNCOMMITTED有什么区别

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

我使用SQL Server 2012。
: z5 Z, g8 p- f& m. t9 h; H) n我写了两个查询,但是NOLOCK和之间有什么不同UnCommitted?9 e* S' M- q) @5 v# K6 \; [/ g6 Q
SELECT lastname, firstname, o0 N  ^/ P* J3 |9 d
FROM HR.Employees with (READUNCOMMITTED)) Z: f/ Z: w7 c- @/ G. v
SELECT lastname, firstname
8 T- X6 l1 j+ M  D! A, B5 ~6 \) NFROM HR.Employees with (NoLock)  F, [. w0 |+ g! o0 K
                ! k$ L* Y1 i' ?+ Y9 s: N# H
解决方案:
1 X; w/ h* g" C) l0 Q               
: Z9 r- F5 K( l. ^$ i/ @. J: s1 M/ a

. A' }7 c' A$ H" L3 T% i. [                NOLOCK: 相当于READ UNCOMMITTED(来源: MSDN
" Z! b3 b. [( a1 K8 ~NOLOCK或READ
( p) i( U) M# s" oUNCOMMITTED指定允许脏读取。没有发出共享锁来防止其他事务修改当前事务读取的数据,并且其他事务设置的互斥锁不会阻止当前事务读取锁定的数据。允许脏读取可能会导致更高的并发性,但代价是读取数据修改,然后其他事务将其回滚
$ E" g& v  y" ]# OREAD UNCOMMITTED并NOLOCK提示仅适用于数据锁。所有查询(包括那些with READ UNCOMMITTED and
0 T) B2 M0 k  yNOLOCK提示)在编译和执行期间均获得Sch-S(模式稳定性)锁。因此,当并发??事务在表上持有Sch-M(架构修改)锁时,查询将被阻止
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则