如果我运行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
?
答案 0 :(得分:1)
SELECT查询是否有可能同时读取更新的数据1和未更新的数据0?
是的。 READ UNCOMMITTED / NOLOCK没有 no 正确性保证。您可以获得的结果完全是错误的,并且在任何时间点都不会存在,这通常是因为查询正在读取多个数据结构,例如,在非聚集索引上进行搜索,然后在聚集索引上进行书签查找。 READ UNCOMMITED / NOLOCK中没有使用任何一致性机制来读取非聚集索引和聚集索引。行也有可能在聚簇索引中移动,并且被多次读取或在使用脏读进行扫描时被读取的次数少于一次。