ACID和数据库事务如何工作?

时间:2010-09-18 03:35:47

标签: database transactions acid

ACID和数据库事务之间有什么关系?

ACID是否提供数据库事务还是同样的事情?

有人可以启发这个话题。

8 个答案:

答案 0 :(得分:290)

ACID是您在修改数据库时要应用的一组属性。

  • 原子性
  • 一致性
  • 分离
  • 耐久性

事务是一组相关的更改,用于实现某些ACID属性。事务是实现ACID属性的工具。

原子性意味着您可以保证所有交易都发生,或者没有任何交易发生;你可以将复杂的操作作为一个单独的单元进行,全部或全部,崩溃,电源故障,错误或其他任何东西都不允许你处于只发生一些相关变化的状态。

一致性意味着您保证您的数据一致;不会违反您对相关数据的任何约束。

隔离意味着一个事务无法从另一个尚未完成的事务中读取数据。如果两个事务同时执行,每个事务都会看到世界好像是按顺序执行,如果需要读取另一个事务所写的数据,则必须等到另一个事务完成。

持久性意味着一旦事务完成,就可以保证所有更改都已记录到持久介质(例如硬盘)中,并且同样记录了事务已完成的事实。

因此,交易是保证这些财产的机制;它们是将相关行为分组在一起的一种方式,因此总的来说,一组操作可以是原子的,产生一致的结果,与其他操作隔离,并且可以持久记录。

答案 1 :(得分:33)

ACID是任何事务处理引擎的理想属性。

DBMS(如果有任何好处)是一种特定类型的事务处理引擎,通常在很大程度上但不完全暴露这些属性。

但是存在其他可以暴露这些属性的引擎。曾经被称为“TP监视器”的软件就是一个很好的例子(现在主要是Web服务器)。

这样的TP监视器可以访问除DBMS(例如打印机)之外的资源,并且仍然保证ACID对其用户。作为打印机参与交易时ACID可能意味着什么的一个例子:

  • 原子性:整个文档被打印或根本没有打印
  • 一致性:在交易结束时,供纸定位在页面顶部
  • 隔离:打印时没有两个文档混淆
  • 耐用性:打印机可以保证不会使用空墨盒“打印”。

答案 2 :(得分:15)

我略微修改了打印机示例以使其更易于解释

1个有2页内容的文件被发送到打印机

交易 - 发送到打印机的文档

  • 原子性 - 打印机打印2页文档或无
  • 一致性 - 打印机打印半页,页面卡住。打印机重新启动并打印包含所有内容的2页
  • 隔离 - 正在进行太多打印输出 - 打印机打印正确的文档内容
  • 耐久性 - 在打印时,有一种力量 cut-printer再次打印文档,没有任何错误

希望这可以帮助某人掌握ACID的概念

答案 3 :(得分:11)

ACID属性是数据库理论非常古老而重要的概念。我知道你可以在这个主题上找到很多帖子,但我仍然希望就此开始分享答案,因为这是RDBMS的一个非常重要的主题。

数据库系统使用许多不同类型的交易,其中所有交易都具有某些特征。该特征是已知的ACID属性。 ACID属性需要所有数据库事务的被授予者才能完成所有任务。

原子性:提交全部或全部。

一致性:在验证所有规则和交易约束方面做出一致的记录。

隔离:确保两个事务彼此不知道。

持久性:永久存储已提交的数据。 Reference taken from this article:

答案 4 :(得分:9)

  

ACID和数据库事务之间有什么关系?

在关系数据库中,每个SQL语句都必须在事务范围内执行。

如果不明确定义事务边界,数据库将使用包含每个单独语句的隐式事务。

隐式事务在语句执行之前开始,在执行语句之后结束(提交或回滚)。 隐式事务模式通常称为autocommit。

this article中所述,只有当所有包含的操作都成功时,事务才是读取/写入操作的集合。

Atomicity

本质上,交易的特征是有四个属性(通常称为ACID):

  • 原子性
  • 一致性
  • 分离
  • 耐久性
  

ACID是否提供数据库事务还是同样的事情?

对于关系数据库系统,这是正确的,因为SQL Standard指定事务应该提供ACID保证:

原子性

Atomicity采用单独的操作并将其转换为全有或全无的工作单元,当且仅当所有包含的操作都成功时才能成功。

事务可能会封装状态更改(除非它是只读状态更改)。无论在任何给定时间交错多少并发事务,事务必须始终使系统保持一致状态。

一致性

一致性意味着对每个已提交的事务强制执行约束。这意味着所有密钥,数据类型,检查和触发都是成功的,并且不会触发约束违规。

分离

事务需要并发控制机制,即使在交错时也能保证正确性。隔离为我们带来了隐藏来自外部世界的未提交状态更改的好处,因为失败的事务不应该破坏系统的状态。通过使用悲观或乐观锁定机制的并发控制来实现隔离。

耐久性

成功的事务必须永久更改系统的状态,在结束之前,状态更改将记录在持久的事务日志中。如果我们的系统突然受到系统崩溃或停电的影响,则可能会重播所有未完成的已提交事务。

enter image description here

有关持久性和重做日志的更多详细信息,请查看this article

答案 5 :(得分:4)

引用Wikipedia

  

ACID(原子性,一致性,隔离性,持久性)是一组保证数据库事务可靠处理的属性。

支持事务的DBMS将努力支持所有这些属性 - 任何商业DBMS(以及几个开源DBMS)都提供完整的ACID“支持” - 尽管它通常是可能的(例如,具有不同的隔离级别) MSSQL)减少ACIDness - 从而失去完全交易行为的保证。

答案 6 :(得分:2)

[Gray]在1981年介绍了交易的ACD属性​​。1983年[Haerder]添加了Isolation属性。在我看来,ACD属性​​将有一组更有用的属性来讨论。对原子性的一种解释(事务应该是任何时候从任何客户端看到的原子)实际上意味着隔离属性。当事务隔离时,“隔离”属性很有用;当隔离属性放松时。在ANSI SQL中说:如果隔离级别较弱,则SERIALIZABLE。但是当隔离级别是SERIALIZABLE时,隔离属性并不是真正感兴趣的。

我在博文中写了更多关于此内容的文章:“ACID没有意义”。

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

[格雷]交易概念,吉姆格雷,1981年。 http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder]面向事务的数据库恢复原理,Haerder和Reuter,1983。 http://www.stanford.edu/class/cs340v/papers/recovery.pdf

答案 7 :(得分:0)

可以将事务定义为被视为最小处理单元的任务集合。每个最小处理单元不能进一步划分。

所有事务必须包含四个通常称为ACID属性的属性。即ACID是任何交易的属性组。

  • 原子性:
  • 一致性
  • 分离
  • 耐久性