首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WITH (NOLOCK) vs SET事务隔离级别READ UNCOMMITTED

WITH (NOLOCK) vs SET事务隔离级别READ UNCOMMITTED
EN

Stack Overflow用户
提问于 2010-08-24 02:05:08
回答 4查看 142.7K关注 0票数 125

谁能给我一些指导,告诉我什么时候应该使用WITH (NOLOCK)而不是SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

每种方法的优缺点是什么?与使用另一种相比,您是否遇到了任何意想不到的后果?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-24 02:12:34

它们是一回事。如果您使用set transaction isolation level语句,它将应用于连接中的所有表,因此,如果您只需要一个或两个表上的nolock,请使用该语句;否则,请使用另一个。

这两种方法都会给你带来脏读。如果你对此没有意见,那就使用它们。如果不能进行脏读,那么可以考虑使用snapshotserializable提示。

票数 112
EN

Stack Overflow用户

发布于 2010-08-24 02:11:01

WITH (NOLOCK)是一个表级别的提示。将事务隔离级别设置为READ_UNCOMMITTED会影响连接。不同之处在于范围。请参阅SQL Server文档中的READUNCOMMITTED和NOLOCK:

http://technet.microsoft.com/en-us/library/ms187373.aspx

对于事务隔离级别:http://technet.microsoft.com/en-us/library/ms173763.aspx

票数 27
EN

Stack Overflow用户

发布于 2010-08-24 02:20:39

据我所知,正如Strommy所说,唯一的区别是效果的范围。表上的NOLOCK提示和会话上未提交的读取。

至于可能出现的问题,这都是关于一致性的。如果您关心这一点,那么请注意,您可能会得到所谓的脏读,这可能会影响正在对不正确的信息进行操作的其他数据。

我个人认为我没有从中看到任何问题,但这可能更多地是因为我使用nolock的方式。您需要意识到,在某些情况下可以使用它。这样的场景,您主要是将新数据添加到表中,但后面有另一个进程来检查数据场景。这可能是可以的,因为主流不包括在读取期间返回和更新行。

另外,我认为这些天你应该研究一下多版本并发控制。我相信他们在2005年添加了它,它通过给读者提供数据库的快照来帮助阻止作者阻止读者使用。我将包含一个链接,并将进一步的研究留给读者:

MVCC

Database Isolation Levels

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3550337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档