选择无可修改数据的锁定提示查询

时间:2017-09-01 09:49:05

标签: sql-server

我想从审计表中读取数据,其中数据是只读的,不会被应用程序修改。应用程序仅将数据插入表中,但不更新现有记录。

select * from mytable with(nolock) where id in (1,2,3,4,5)

我知道'没有锁'意味着获取未提交的数据,但我提供了id(1,2,3,4,5),它被提交了一个。那么这种方法有任何问题或副作用吗?

1 个答案:

答案 0 :(得分:0)

NOLOCK确实意味着你会读到“肮脏的”#39;数据,因此您可以读回未提交的值,然后可以回滚,这意味着您获得的数据不准确。所以,只要你对阅读脏数据感到高兴,你就没事了。

您传递给查询的ID并不是很多,如果它们不在那里,它就不会返回一行。

NOLOCK - 您在查询中选择*,例如,一列是' name',' name'对于ID 1是“测试”,我打开一个交易,将其更新为“实时”,然后运行上述操作。你会看到这个名字'对于ID 1正在播放,然后我将其回滚,因此在数据中它实际上是“测试”,这意味着您的阅读不准确。

如果您没有指定' NOLOCK'您的选择将等到我的事务完成后再返回任何数据,它将是已提交到数据库的数据,而不是读取时的数据状态。