ACID和数据库交易?

nev*_*ame 152 database transactions acid

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

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

有人可以启发这个话题.

Bri*_*ell 310

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

  • 原子性
  • 一致性
  • 隔离
  • 耐久力

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

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

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

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

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

因此,交易是保证这些财产的机制; 它们是将相关动作组合在一起的一种方式,使得作为一个整体,一组操作可以是原子的,产生一致的结果,与其他操作隔离,并且被持久地记录.

  • @MarcRochkind即使事务中的各个操作违反一致性约束,事务也允许您应用一致性检查.例如,如果您要更新复式簿记系统,则可能需要从多个帐户中扣款并同时存入多个帐户.如果没有事务,您将在每个语句之后检查约束,并且会因为单个语句不保持一致性而失败.对于事务,尽管单个语句不保持一致性,但事务作为一个整体. (19认同)
  • 您说"一致性意味着您保证您的数据将保持一致;您对相关数据的任何约束都不会受到侵犯." 如果通过约束,您指的是数据库中定义的那些(例如,检查约束),事务管理与防止它们被违反有什么关系?他们不是一直都有效吗?在我看来,ACID中的C必须具有另一种含义. (6认同)
  • @a_horse_with_no_name 你在谈论 OCC(乐观并发控制)v/s PCC(悲观)。两者都可以在符合 ACID 的数据库系统中实现,这取决于您是要一致性还是高可用性。 (2认同)

Erw*_*out 34

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

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

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

这样的TP监视器可以访问除DBMS(例如打印机)之外的资源,并且仍然保证ACID对其用户.作为打印机参与事务时ACID可能含义的示例:

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

  • 简洁的打印机示例. (3认同)
  • 好例子.我不明白"一致性"部分.在我看来,一个更好的例子是"打印机不接受大于10英寸的纸张." (2认同)
  • 我承认这有点牵强。但很难找到更好的例子,因为“一致性”与数据有关,而打印机并不完全是数据设备。 (2认同)

Man*_*ngh 18

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

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

交易 - 发送给打印机的文件

  • 原子性 - 打印机打印2页文档或不打印
  • 一致性 - 打印机打印半页,页面卡住.打印机重新启动并打印包含所有内容的2页
  • 隔离 - 当打印输出太多时 - 打印机打印正确的文档内容
  • 耐用性 - 在打印时,有一个断电打印机再次打印文档没有任何错误

希望这有助于某人掌握ACID的概念


Anv*_*esh 10

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

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

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

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

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

持久性:承诺数据永久存储. 参考本文:


Vla*_*cea 9

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

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

在不显式定义事务边界的情况下,数据库将使用隐式事务,该隐式事务环绕每个单独的语句。

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

本文所述,事务是仅在所有包含的操作都成功时才成功的读/写操作的集合。

原子性

交易固有具有四个属性(通常称为ACID):

  • 原子性
  • 一致性
  • 隔离
  • 耐用性

ACID提供数据库事务还是同一件事?

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

原子性

原子性接受单个操作并将其转变为一项全有或全无的工作单元,只有当所有包含的操作都成功时,该操作才能成功。

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

一致性

一致性意味着对每个已提交的事务强制执行约束。这意味着所有键,数据类型,检查和触发器均成功,并且不会触发任何约束冲突。

隔离

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

耐用性

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

在此处输入图片说明

有关耐久性和重做日志的更多详细信息,请参阅本文


Wil*_*l A 5

引用维基百科

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

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