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