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



如果我运行如下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

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

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

最新更新