【问题标题】:SQL: at REPEATABLE READ isolation level, are UPDATE locks held to the end of the transaction?SQL:在 REPEATABLE READ 隔离级别,UPDATE 锁是否保持到事务结束?
【发布时间】:2011-08-23 10:09:24
【问题描述】:

have read 关于 REPEATABLE READ 如何导致 SELECT 语句持有的锁被持有到事务结束。 UPDATE 语句采用的独占锁是否也是如此?因此,当我在事务中更新一行时,是否会出现后续 SELECT 将返回 UPDATE 留下的值的情况?

所以我知道,如果我在事务 1 中选择一行,那么事务 2 在事务 1 完成之前无法更新它。但是,如果我 UPDATE 事务 1 中的行,那么事务 2 是否还需要等待事务 1 完成,然后事务 2 才能 UPDATE 呢?

【问题讨论】:

    标签: sql transactions isolation-level


    【解决方案1】:

    除非第二个事务在隔离级别 READ UNCOMMITED 运行,否则第一个事务中的 UPDATE 语句采用的排他锁将阻止任何选择,直到第一个事务提交。

    所以我知道如果我在事务 1 中选择一行,那么 在事务 1 完成之前,事务 2 无法更新它。然而, 如果我更新事务 1 中的行,事务 2 仍然必须 等待事务 1 完成,事务 2 才能更新它?

    是的。

    如果在 REPEATABLE READ 下,您在事务 1 中执行了 SELECT,事务 2 仍然可以在事务 1 中添加与 SELECT 的 WHERE 子句匹配的新数据。这是因为事务 1 放置了行读取锁定所有检索到的数据,但不锁定范围锁定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2019-04-16
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多