小编Bud*_*hiP的帖子

SQL Server 是否在使用 REPEATABLE READ 时在扫描记录上放置共享锁

假设一个SQLCmd会话正在使用事务隔离级别REPEATABLE READ

在这个会话中,我开始一个事务并在非索引列上执行一个UPDATE带有WHERE子句的语句。该语句应该WHERE为表中的每条记录评估子句,但只有一条会匹配。

如果我在运行UPDATE语句后检查放置在此事务下的锁,我只能看到IXTable 和 Page 上的两个锁,以及X更新的行上的锁。

我的问题是:数据库引擎不应该在它读取的所有行上放置共享锁以确保REPEATABLE READ吗?如果某个其他事务更新了一条记录,使其与 UPDATE 语句中的 WHERE 子句匹配,从而违反了REPEATABLE READ.

如果我执行 a SELECT *,那么我可以看到它S在每一行上放置了锁,这些锁尚未用X.

任何人都可以帮助我了解这种情况吗?

我已经尝试过 SQL Server 2008 R2 和 2012,两者的行为相同。

sql-server isolation-level

5
推荐指数
1
解决办法
841
查看次数

标签 统计

isolation-level ×1

sql-server ×1