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