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