174

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

ACID 是提供数据库事务还是相同的东西?

有人可以启发这个话题。

4

9 回答 9

340

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

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

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

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

一致性意味着您保证您的数据将是一致的;您对相关数据的任何限制都不会被违反。

隔离意味着一个事务不能从另一个尚未完成的事务中读取数据。如果两个事务同时执行,那么每个事务都会像按顺序执行一样看待这个世界,如果一个事务需要读取另一个事务写入的数据,则必须等到另一个事务完成。

持久性是指一旦一个事务完成,保证所有的变化都记录在一个持久的介质(如硬盘)上,事务完成的事实也同样被记录下来。

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

于 2010-09-18T03:50:05.820 回答
42

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

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

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

此类 TP 监视器可以访问 DBMS 以外的资源(例如打印机),并且仍然向其用户保证 ACID。例如,当打印机参与事务时,ACID 可能意味着什么:

  • 原子性:整个文档被打印或什么都没有
  • 一致性:在交易结束时,进纸位于页面顶部
  • 隔离:打印时不会混淆两个文档
  • 耐用性:打印机可以保证它不是用空墨盒“打印”的。
于 2010-09-18T09:23:59.880 回答
27

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

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

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

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

事务是仅当所有包含的操作都成功时才成功的读/写操作的集合。

原子性

本质上,事务具有四个属性(通常称为 ACID):

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

ACID 是提供数据库事务还是相同的东西?

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

原子性

原子性将单个操作变成一个全有或全无的工作单元,当且仅当所有包含的操作都成功时才会成功。

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

一致性

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

隔离

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

耐用性

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

RDBMS 的工作原理

于 2018-04-01T16:29:45.640 回答
24

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

1 个包含 2 页内容的文档已发送到打印机

事务- 发送到打印机的文档

  • 原子性- 打印机打印 2 页文档或不打印
  • 一致性- 打印机打印半页并且页面卡住。打印机自行重启并打印包含所有内容的 2 页
  • 隔离- 虽然正在进行的打印输出过多 - 打印机打印文档的正确内容
  • 耐用性- 打印时断电 - 打印机再次打印文档而没有任何错误

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

于 2017-09-18T07:04:13.790 回答
12

ACID 属性是数据库理论中非常古老且重要的概念。我知道你可以找到很多关于这个主题的帖子,但我仍然想开始分享这个问题的答案,因为这是 RDBMS 非常重要的主题。

数据库系统处理许多不同类型的事务,其中所有事务都有一定的特征。该特性称为 ACID 特性。ACID 属性接受所有数据库事务以完成所有任务。

原子性:要么全部提交,要么什么都不提交。

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

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

持久性:提交的数据永久存储。 来自这篇文章的参考:

于 2015-05-21T05:21:55.647 回答
5

引用维基百科

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

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

于 2010-09-18T03:46:19.027 回答
3

[Gray] 在 1981 年为交易引入了 ACD 属性。1983 年 [Haerder] 添加了 Isolation 属性。在我看来,ACD 属性将有一组更有用的属性可供讨论。原子性的一种解释(事务在任何时候都应该是原子的)实际上暗示了隔离属性。当事务没有被隔离时,“隔离”属性很有用;当隔离属性放松时。在 ANSI SQL 中:如果隔离级别较弱,则 SERIALIZABLE。但是当隔离级别是 SERIALIZABLE 时,隔离属性就不是很重要了。

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

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

[灰色] 交易概念,Jim Gray,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

于 2013-12-13T13:03:02.013 回答
2

数据库中的 ACID 属性:

  • 原子性事务全有或全无
  • 一致性只保存有效数据(数据库从一个一致的状态到另一个一致的状态。)
  • 隔离事务互不影响(系统中可以同时运行多个事务。并行执行多个事务必须与顺序运行具有相同的结果。)
  • 持久性:写入的数据不会丢失(即使数据库立即崩溃或在断电的情况下)。
    信用
于 2021-10-11T12:13:39.760 回答
1

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

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

  • 原子性:
  • 一致性
  • 隔离
  • 耐用性
于 2017-09-14T10:23:47.390 回答