2

我对事务的 ACID 属性感到困惑。
据我了解:
交易必须符合 ACID。正是 ACID 确保了一系列语句确实是一个事务。到目前为止还可以。
现在有各种隔离级别(我省略了 READ-UNCOMMITED,因为它完全是一种非事务模式):READ-COMMITED、READ-REPEATABLE 和 SERIALIZABLE
这些级别中的每一个都提供不同程度的隔离,在我的理解中也是一致性。
所以我无法理解的是:
如果各种隔离级别提供不同级别的先决条件 ACID 属性,它们怎么可能是有效/可接受的隔离级别?
或者,什么是事务的 SQL 定义如此宽松/非正式/非严格,以至于出现了这些差异?我找不到任何 SQL 标准文档来阅读并查看实际定义是什么

4

3 回答 3

0

为什么我们有/接受不同的交易级别?

从理论上讲,每个事务都应该单独执行(以实现 ACID 属性的 I),但实际上这没有多大意义。这都是关于性能问题。高并发应用程序的数据库无法以这种方式正确执行。

这个想法是在隔离和性能之间实现平衡。当隔离级别降低时(例如,通常是默认隔离级别的 COMMITTED READ)可能会出现一些问题:丢失更新、不可重复读取、幻读。通常这种风险是可以接受的,也可以控制它只在某些事务上提高隔离级别。

于 2013-10-15T11:11:49.697 回答
0

我还发现 ACID 属性令人困惑。在我看来,这些属性没有明确定义。似乎添加了隔离属性来描述原子性属性的放松。对于“真实”事务(隔离级别 SERIALIZABLE),只有 ACD 属性是有意义的。这三个属性最初是由 Gray 提出的。

在我的博客“ACID 没有意义”中查看更多相关信息。

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

于 2013-12-13T12:40:31.427 回答
0

ACID 很棒,ACID 是可取的,ACID 很棒。

但 ACID 是标准的。标准的存在不会自动使所有实施者都依从。

如果 RDBMS 以任何方式提供 ACID 行为,则它是符合 ACID 的。并非每个 DMBS 都符合 ACID(直到最近,MySQL 才符合)。

ACID 是理想的世界。隔离级别是真实世界。

于 2013-10-14T21:16:01.180 回答