【问题标题】:How is atomic rule ensured when using default (read commited) isolation mode?使用默认(已提交读)隔离模式时,原子规则如何确保?
【发布时间】:2020-09-18 15:49:00
【问题描述】:

事务的一个重要属性是原子性。

默认模式是读取提交。这可以防止脏读。但是我们有重复读取和幻行的问题。

在使用默认(已读)隔离模式时如何确保原子规则?

Example- in tran1 我从 table1 读取值。当 tran1 仍在运行时,我启动 tran2 并更新 table1 中的相同值。所以 tran1 的值已经过时了。

【问题讨论】:

    标签: sql-server tsql transactions isolation-level read-committed


    【解决方案1】:

    根据这个article,“读提交”并不能保证“原子性”:

    不幸的是,使用 read 时该假设不正确 坚定的。读提交的隔离级别保证只有 已提交的数据将被读取;它不保证有多少 提交的数据会被返回,容易出现不一致的分析 问题。如果你想避免不一致的分析,你需要 提高隔离级别(如果使用锁定)或更改为 用于读取提交(甚至快照隔离)的版本控制。

    wikipedia 说:

    在这个隔离级别会出现不可重复读现象)

    但我不认为维基百科意味着它破坏了“原子性”。

    【讨论】:

      【解决方案2】:

      读取提交隔离模式不会阻止在事务仍处于打开状态时更新您在事务中读取的行。

      如果您想防止这种情况发生,则需要将隔离级别设置为 REPEATABLE READ(或 SERIALIZABLE)。 或者您可以将数据库的 READ_COMMITTED_SNAPSHOT 选项设置为 ON。

      【讨论】:

      • 那么原子事务只有在我们有可重复读取或可序列化模式的时候才有?
      猜你喜欢
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2020-08-18
      • 2019-10-19
      • 2020-01-08
      • 1970-01-01
      • 2018-03-04
      相关资源
      最近更新 更多