我想从审计表中读取数据,其中数据是只读的,不会被应用程序修改。应用程序仅将数据插入表中,但不更新现有记录。
select * from mytable with(nolock) where id in (1,2,3,4,5)
我知道'没有锁'意味着获取未提交的数据,但我提供了id(1,2,3,4,5),它被提交了一个。那么这种方法有任何问题或副作用吗?
答案 0 :(得分:0)
NOLOCK确实意味着你会读到“肮脏的”#39;数据,因此您可以读回未提交的值,然后可以回滚,这意味着您获得的数据不准确。所以,只要你对阅读脏数据感到高兴,你就没事了。
您传递给查询的ID并不是很多,如果它们不在那里,它就不会返回一行。
NOLOCK - 您在查询中选择*,例如,一列是' name',' name'对于ID 1是“测试”,我打开一个交易,将其更新为“实时”,然后运行上述操作。你会看到这个名字'对于ID 1正在播放,然后我将其回滚,因此在数据中它实际上是“测试”,这意味着您的阅读不准确。
如果您没有指定' NOLOCK'您的选择将等到我的事务完成后再返回任何数据,它将是已提交到数据库的数据,而不是读取时的数据状态。