【问题标题】:Will SQL Server NOLOCK hint return partially written rows?SQL Server NOLOCK 提示会返回部分写入的行吗?
【发布时间】:2009-10-02 19:25:58
【问题描述】:

首先,我不是在问是否应该使用 NOLOCK。让我们过去吧。

我想问题归结为sql server如何写入数据?是一次写入一整行还是一次写入一列?

我问是因为正在考虑 NOLOCK 提示。只要返回(或不返回)整行,脏读就可以了。部分写入的行是不可接受的。

【问题讨论】:

标签: sql sql-server tsql nolock


【解决方案1】:

没有。插入、更新和删除等数据修改操作受低级物理Latches 保护。所有数据访问操作,包括无锁 SELECT,都必须符合锁存协议。结果是任何读者都看不到部分写入。

【讨论】:

    【解决方案2】:

    不,它不会返回部分写入的行。 NOLOCK 仅表示此查询不会创建新锁。这并不意味着它不会尊重现有的锁,并且 sql server 不会在没有先获取锁的情况下执行任何写入数据的操作。

    它可能会返回已过期或不再相关的行,因为其他内容写入了通常会被此查询锁定的行。

    【讨论】:

    • 忽略已存在的锁 "不发布共享锁以防止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻止当前事务读取锁定的数据。 "来自technet.microsoft.com/en-us/library/ms187373.aspx
    • 它不会发出锁,但是更新可以修改行,而带有 nolock 的 select 正在读取它,所以如果是这种情况,我认为您可以获得部分写入的行。
    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多