使用 nolock 和独占锁

Posted

技术标签:

【中文标题】使用 nolock 和独占锁【英文标题】:with nolock and exclusive locks 【发布时间】:2011-09-08 20:42:11 【问题描述】:

因此,使用 nolock 不会占用任何锁。它还会尊重优秀的锁吗?例如,如果我尝试使用 nolock 选择一行,而另一个进程已对其设置了独占锁,我的使用 nolock 选择会被阻止,还是会选择该行?

【问题讨论】:

【参考方案1】:

我认为使用“NOLOCK”会导致脏读,这意味着在某些锁定发生之前存在的数据。假设,如果在一个表上设置了写锁来更新一些数据,我们尝试使用“NOLOCK”读取数据,那么更新之前存在的数据就会返回给我们。

希望这会有所帮助!

【讨论】:

脏读实际上是读取未提交的记录,而不是读取更新前的记录。 @JNK - 只是为了确认一下,您指的是 [lock [read] update unlock] - before,而不是 [lock update [read] error rollback unlock] - uncommitted?

以上是关于使用 nolock 和独占锁的主要内容,如果未能解决你的问题,请参考以下文章

转:nolock的替代方案-提交读快照隔离[行版本控制]

Java并非锁之独占非公平锁理解

mysql的独占锁和共享锁

理解AbstractQueuedSynchronizer提供的独占锁和共享锁语义

Azure 队列中基于租约和基于锁的独占访问之间的区别

AQS详解之独占锁模式