脏读是否可能同时包含更改/未更改的数据?

时间:2019-07-17 01:21:40

标签: sql sql-server

如果我运行UPDATE这样的查询:

UPDATE table_name
SET column_name = 1
WHERE column_name = 0

另一个事务在隔离级别SELECT下针对同一表运行READ UNCOMMITTED

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT *
FROM table_name
WHERE column_name = 0 OR column_name = 1

SELECT查询是否可能同时读取更新的数据1和未更新的数据0

1 个答案:

答案 0 :(得分:1)

  

SELECT查询是否有可能同时读取更新的数据1和未更新的数据0?

是的。 READ UNCOMMITTED / NOLOCK没有 no 正确性保证。您可以获得的结果完全是错误的,并且在任何时间点都不会存在,这通常是因为查询正在读取多个数据结构,例如,在非聚集索引上进行搜索,然后在聚集索引上进行书签查找。 READ UNCOMMITED / NOLOCK中没有使用任何一致性机制来读取非聚集索引和聚集索引。行也有可能在聚簇索引中移动,并且被多次读取或在使用脏读进行扫描时被读取的次数少于一次。