SQL Server 2012 - “可重复读”隔离级别是如何工作的?

3
我觉得我应该知道这个,但我找不到任何具体概述这个的东西,所以在这里提问。
SQL Server的文档描述REPEATABLE READ为:
指定语句不能读取已被其他事务修改但尚未提交的数据,并且没有其他事务可以修改当前事务已读取的数据,直到当前事务完成
这很有道理,但是当出现这些情况时实际上会发生什么呢?例如,如果事务A读取行1,然后事务B尝试更新行1,会发生什么?事务B会等待事务A完成,然后再尝试吗?还是会抛出异常?
1个回答

1

REPEATABLE READ会在事务期间对查询计划操作读取的所有行进行S锁定。由此得出对您问题的答案:

  1. 如果先进行读取,则会对该行进行S锁定,写入操作必须等待。
  2. 如果先进行写入,则S锁定将等待写入操作提交。

在Hekaton下工作方式不同,因为没有锁定。


那么,它确实会等待,是吗?因此,事务A实际上并没有阻止事务B进行其更新 - 它只是在事务A完成之前等待执行。 - bornfromanegg
它在进行特定行的写入或读取之前等待。答案难道不很明显吗? - usr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接