【发布时间】:2011-04-14 00:10:36
【问题描述】:
ACID和数据库事务有什么关系?
ACID 是给数据库事务还是同样的东西?
谁能启发这个话题。
【问题讨论】:
标签: database transactions acid
ACID和数据库事务有什么关系?
ACID 是给数据库事务还是同样的东西?
谁能启发这个话题。
【问题讨论】:
标签: database transactions acid
ACID 是一组您希望在修改数据库时应用的属性。
事务是一组相关的更改,用于实现某些 ACID 属性。事务是实现 ACID 属性的工具。
原子性意味着您可以保证所有事务都发生,或者不发生;您可以将复杂的操作作为一个单独的单元进行,全有或全无,并且崩溃、电源故障、错误或其他任何事情都不会让您处于仅发生某些相关更改的状态。
一致性意味着您保证您的数据将是一致的;您对相关数据的任何限制都不会被违反。
隔离意味着一个事务不能从另一个尚未完成的事务中读取数据。如果两个事务同时执行,每个事务都将看到世界好像它们是按顺序执行的一样,如果一个事务需要读取另一个事务写入的数据,则必须等待另一个事务完成。
持久性是指一旦事务完成,保证所有的更改都记录在持久介质(如硬盘)中,事务完成的事实同样被记录下来。
因此,交易是保证这些属性的一种机制;它们是一种将相关操作组合在一起的方式,因此作为一个整体,一组操作可以是原子的、产生一致的结果、与其他操作隔离并被持久记录。
【讨论】:
ACID 是任何事务处理引擎的理想属性。
DBMS 是(如果有好处的话)一种特殊类型的事务处理引擎,通常在很大程度上但不完全公开这些属性。
但存在其他引擎也可以公开这些属性。过去被称为“TP 监视器”的软件就是一个很好的例子(现在的等价物主要是 Web 服务器)。
此类 TP 监视器可以访问 DBMS 以外的资源(例如打印机),并且仍向其用户保证 ACID。例如,当打印机参与事务时,ACID 可能意味着什么:
【讨论】:
ACID和数据库事务有什么关系?
在关系数据库中,每条 SQL 语句都必须在事务范围内执行。
如果不明确定义事务边界,数据库将使用隐式事务,该事务包含每个单独的语句。
隐式事务在语句执行之前开始,在语句执行之后结束(提交或回滚)。 隐式事务模式通常称为自动提交。
事务是读/写操作的集合,只有当所有包含的操作都成功时才会成功。
一个事务本质上具有四个属性(通常称为 ACID):
ACID 是给数据库事务还是同样的东西?
对于关系数据库系统,这是正确的,因为 SQL 标准规定事务应提供 ACID 保证:
原子性将单个操作变成一个全有或全无的工作单元,当且仅当所有包含的操作都成功时才会成功。
事务可能封装状态更改(除非它是只读的)。无论在任何给定时间交错多少并发事务,事务都必须始终使系统保持一致状态。
一致性意味着对每个提交的事务都强制执行约束。这意味着所有的 Keys、Data types、Checks 和 Trigger 都是成功的,并且没有触发约束冲突。
事务需要并发控制机制,即使在交错时也能保证正确性。隔离给我们带来了对外部世界隐藏未提交状态更改的好处,因为失败的事务不应该破坏系统的状态。隔离是通过使用悲观或乐观锁定机制的并发控制来实现的。
一个成功的事务必须永久地改变一个系统的状态,并且在结束它之前,状态改变被记录在一个持久化的事务日志中。如果我们的系统突然受到系统崩溃或断电的影响,那么所有未完成的已提交事务都可能被重放。
【讨论】:
我稍微修改了打印机示例,使其更易于解释
1 个包含 2 页内容的文档已发送到打印机
事务 - 文档发送到打印机
希望这有助于某人掌握 ACID 的概念
【讨论】:
ACID 属性是数据库理论中非常古老且重要的概念。我知道你可以找到很多关于这个主题的帖子,但我仍然想开始分享这个问题的答案,因为这是 RDBMS 非常重要的主题。
数据库系统处理许多不同类型的事务,其中所有事务都有一定的特征。该特性称为 ACID 特性。 ACID 属性接受所有数据库事务以完成所有任务。
原子性:要么全部提交,要么什么都不提交。
一致性:在验证交易的所有规则和约束方面做出一致的记录。
隔离:确保两个事务彼此不知道。
持久性:提交的数据永久存储。 Reference taken from this article:
【讨论】:
引用Wikipedia:
ACID(原子性、一致性、隔离性、持久性)是一组保证数据库事务得到可靠处理的属性。
支持事务的 DBMS 将努力支持所有这些属性 - 任何商业 DBMS(以及几个开源 DBMS)都提供完整的 ACID“支持” - 尽管这通常是可能的(例如,在不同的隔离级别MSSQL) 来减少 ACIDness - 从而失去完全事务行为的保证。
【讨论】:
[Gray] 在 1981 年为交易引入了 ACD 属性。1983 年,[Haerder] 添加了 Isolation 属性。在我看来,ACD 属性将有一组更有用的属性可供讨论。原子性的一种解释(事务在任何时候都应该是原子的)实际上暗示了隔离属性。当事务不被隔离时,“隔离”属性很有用;当隔离属性放松时。在 ANSI SQL 中:如果隔离级别较弱,则 SERIALIZABLE。但是当隔离级别是 SERIALIZABLE 时,隔离属性就不是很重要了。
我在一篇博文中写了更多关于此的内容:“ACID 没有意义”。
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
[Gray] 交易概念,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
【讨论】:
数据库中的 ACID 属性:
【讨论】:
事务可以定义为被视为最小处理单元的任务集合。每个最小处理单元不能再进一步划分。
所有事务必须包含四个通常称为 ACID 属性的属性。即 ACID 是任何事务的一组属性。
【讨论】: