【问题标题】:SQL Server 2012 - How does "Repeatable Read" isolation level work?SQL Server 2012 - “可重复读取”隔离级别如何工作?
【发布时间】:2015-05-14 12:59:40
【问题描述】:

我觉得我应该知道这一点,但我找不到任何具体概述这一点的东西,所以就这样吧。

SQL Server 的 documentation 将 REPEATABLE READ 描述为:

指定语句不能读取已修改但 尚未由其他事务提交,并且没有其他事务 可以修改当前事务已经读取的数据,直到 当前事务完成

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

【问题讨论】:

    标签: sql-server transactions


    【解决方案1】:

    REPEATABLE READ 在事务期间对查询计划运算符已读取的所有行进行 S 锁。您的问题的答案如下:

    1. 如果先读取,它会 S 锁定该行,而写入必须等待。
    2. 如果先写入,则 S 锁会等待写入提交。

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

    【讨论】:

    • 对,那么它会等待吗?所以事务 A 实际上并没有阻止事务 B 进行它的更新 - 它只是让它等到事务 A 完成后再这样做?
    • 它在写入或读取该特定行之前等待。等待的答案不是很清楚吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2011-06-05
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多