0

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

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

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

示例-在 tran1 中,我从 table1 中读取值。当 tran1 仍在运行时,我启动 tran2 并更新 table1 中的相同值。所以 tran1 有陈旧的价值。

4

2 回答 2

0

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

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

于 2020-05-31T09:52:59.687 回答
0

根据这篇文章,“已提交”并不能保证“原子性”:

不幸的是,当使用已提交读时,这种假设是不正确的。读提交隔离级别保证只读取提交的数据;它不保证将返回多少已提交的数据,并且容易出现不一致的分析问题。如果您想避免不一致的分析,您需要提高隔离级别(如果使用锁定)或更改版本控制以进行读取提交(甚至快照隔离)。

维基百科说:

在此隔离级别可能会发生不可重复读取现象)

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

于 2020-12-29T03:15:09.430 回答