代码之家  ›  专栏  ›  技术社区  ›  Jim B

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

  •  113
  • Jim B  · 技术社区  · 14 年前

    有人能给我一些指导我什么时候该用吗 WITH (NOLOCK) SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    每种方法的优缺点是什么?使用其中一个而不是另一个会有任何意外的后果吗?

    6 回复  |  直到 10 年前
        1
  •  107
  •   Michael come lately PhiLho    10 年前

    它们是一样的。如果你使用 set transaction isolation level nolock 在一张或两张桌子上用那个;否则就用另一张。

    两个都会给你带来不好的印象。如果你同意,那就用它们。如果你不能有肮脏的阅读,那么考虑 snapshot serializable

        2
  •  26
  •   Anon246    14 年前

    WITH(NOLOCK)是表级别的提示。将事务隔离级别设置为“READ\u UNCOMMITTED with”会影响连接。区别在于范围。请参见此处的SQL Server文档中的READUNCOMMITTED和NOLOCK:

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

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

        3
  •  10
  •   Community noseratio    7 年前
    • NOLOCK是表(或视图等)的本地项
    • 读取未提交的是每个会话/连接

    至于指导方针。。。从StackOverflow和电子互联网上随机搜索。。。

        4
  •  9
  •   Sean Copenhaver    14 年前

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

    我还认为现在应该研究多版本并发控制。我相信他们在2005年添加了它,它通过给读者一个数据库快照来帮助阻止编写者阻塞读者。我将添加一个链接,并将进一步的研究留给读者:

    MVCC

    Database Isolation Levels

        5
  •  7
  •   Rez.Net    11 年前

    不能在视图中使用Set Transaction Isolation Level Read Uncommitted(事实上,在视图中只能有一个脚本),因此如果应该包含脏行,则必须使用(nolock)。

        6
  •  4
  •   Alex    14 年前

    忘记一个WITH(NOLOCK)可能不会以一种非常戏剧性的方式影响你的程序,但是在你做的地方做一个肮脏的阅读 在某些情况下,一个人可以有所作为。