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

时间:2015-05-14 12:59:40

标签: sql-server transactions

我觉得我应该知道这一点,但我找不到任何具体概述这一点的内容,所以这里就是这样。

SQL Server的documentation将REPEATABLE READ描述为:

  

指定语句无法读取已修改的数据   尚未承诺的其他交易,也没有其他交易   可以修改当前事务已读取的数据,直到   当前交易完成

这是有道理的,但是当出现其中一种情况时,实际发生了什么?例如,如果事务A读取第1行,然后事务B尝试更新第1行,会发生什么?事务B是否等到事务A完成然后再试一次?或者抛出异常?

1 个答案:

答案 0 :(得分:1)

REPEATABLE READ对查询计划运算符在事务持续时间内读取的所有行执行S锁定。您的问题的答案如下:

  1. 如果首先读取它,则S锁定行,写入必须等待。
  2. 如果首先写入,则S-lock等待写入提交。
  3. 在Hekaton下,它的工作方式不同,因为没有锁。