【发布时间】:2009-10-02 19:25:58
【问题描述】:
首先,我不是在问是否应该使用 NOLOCK。让我们过去吧。
我想问题归结为sql server如何写入数据?是一次写入一整行还是一次写入一列?
我问是因为正在考虑 NOLOCK 提示。只要返回(或不返回)整行,脏读就可以了。部分写入的行是不可接受的。
【问题讨论】:
标签: sql sql-server tsql nolock
首先,我不是在问是否应该使用 NOLOCK。让我们过去吧。
我想问题归结为sql server如何写入数据?是一次写入一整行还是一次写入一列?
我问是因为正在考虑 NOLOCK 提示。只要返回(或不返回)整行,脏读就可以了。部分写入的行是不可接受的。
【问题讨论】:
标签: sql sql-server tsql nolock
没有。插入、更新和删除等数据修改操作受低级物理Latches 保护。所有数据访问操作,包括无锁 SELECT,都必须符合锁存协议。结果是任何读者都看不到部分写入。
【讨论】:
不,它不会返回部分写入的行。 NOLOCK 仅表示此查询不会创建新锁。这并不意味着它不会尊重现有的锁,并且 sql server 不会在没有先获取锁的情况下执行任何写入数据的操作。
它可能会返回已过期或不再相关的行,因为其他内容写入了通常会被此查询锁定的行。
【讨论】: