ACID和数据库事务之间有什么关系?
ACID是给予数据库事务的,它并不是同一件事情。
能否有人阐明这个话题。
ACID和数据库事务之间有什么关系?
ACID是给予数据库事务的,它并不是同一件事情。
能否有人阐明这个话题。
ACID是在修改数据库时希望应用的一组属性。
事务是一组相关的更改,用于实现ACID属性。事务是实现ACID属性的工具。
原子性意味着您可以保证整个事务发生或全部不发生;您可以将复杂操作作为一个单独的单位进行,要么全部执行成功,要么完全不执行,同时崩溃、断电、错误或任何其他情况都不会导致只有部分相关更改已经发生。
一致性意味着您保证数据始终是一致的;您对相关数据的所有限制条件都不会违反。
隔离性意味着一个事务不能读取另一个未完成的事务中的数据。如果两个事务同时执行,每个事务将看到它们按顺序执行,如果一个需要读取另一个写入的数据,它必须等待另一个事务完成。
持久性意味着一旦事务完成,就保证记录了所有更改内容到持久性介质(如硬盘),同时记录了事务已经完成的事实。
因此,事务是保证这些属性的机制;它们是一种将相关操作分组在一起的方式,以使作为整体,一组操作可以是原子的、产生一致的结果、与其他操作隔离,并持久地记录下来。
ACID是任何事务处理引擎都需要具备的理想特性。
一个DBMS(如果它真的很好)是一种特定类型的事务处理引擎,通常在很大程度上暴露这些属性,但不完全如此。
但是,还存在其他可以展示这些属性的引擎。以“TP monitors”为例,这种软件可以访问除了DBMS之外的资源(例如打印机),并且仍然向用户保证ACID。举个涉及打印机的ACID可能意味着什么的例子:
ACID和数据库事务有什么关系?
在关系型数据库中,每个SQL语句都必须在事务范围内执行。
如果没有明确定义事务边界,则数据库将使用隐式事务,该事务将包装在每个单独的语句周围。
隐式事务在语句执行之前开始,在语句执行后结束(提交或回滚)。 隐式事务模式通常称为自动提交。
事务是一组读/写操作,只有所有包含的操作成功才会成功。
一个事务本质上由四个属性(通常称为ACID)来描述:
ACID是给数据库事务的吗?还是同一个东西?
对于关系型数据库系统而言,这是正确的,因为SQL标准指定了事务应提供ACID保证:
原子性将单个操作转化为一个全有或全无的工作单元,只有所有包含的操作都成功才会成功。
事务可能封装状态更改(除非它是只读的)。事务必须始终使系统处于一致状态,不管并发事务在任何给定时间交错多少次。
一致性意味着对于每个提交的事务都强制执行约束。这意味着所有键、数据类型、检查和触发器都成功,没有触发约束违规。
事务需要并发控制机制,并且即使被交错处理时也保证正确性。 隔离性带来的好处是将未提交的状态更改隐藏在外部世界中,因为失败的事务不应该破坏系统的状态。 隔离通过使用悲观锁定或乐观锁定机制来实现。
一个成功的事务必须永久地改变系统的状态,并在结束之前将状态更改记录在持久化的事务日志中。如果我们的系统突然受到系统崩溃或停电的影响,则所有未完成的已提交事务都可以重新播放。
我稍微修改了打印机示例,以便更容易理解
将有2页内容的1个文档发送到打印机
事务 - 将文档发送到打印机
希望这可以帮助某些人掌握ACID概念
ACID属性是数据库理论中非常古老和重要的概念。我知道在这个话题上可以找到很多文章,但我仍然想开始分享对此的回答,因为这是RDBMS非常重要的主题。
数据库系统处理许多不同类型的事务,其中每个事务都具有某些特征。这种特征被称为ACID属性。 ACID属性确保所有数据库事务都能完成所有任务。
原子性:要么全部提交,要么全部回滚。
一致性:根据事务的所有规则和约束来验证并生成一致的记录。
隔离性:确保两个事务对彼此互不干扰。
持久性:提交的数据将永久存储。 引用自本文章:
引用维基百科的话:
ACID(原子性、一致性、隔离性、持久性)是一组属性,可确保可靠地处理数据库事务。
支持事务的DBMS将努力支持所有这些属性 - 任何商业DBMS(以及几个开源DBMS)都提供完整的ACID“支持” - 尽管通常可以通过降低ACID度数(例如,使用MSSQL中的不同隔离级别)来减少ACID度数,从而失去完全事务行为的保证。
数据库中的ACID属性:
我在博客文章中写得更多:“ACID没有意义”。
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html
[Gray] The Transaction Concept,Jim Gray,1981年。 http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf
[Haerder] Principles of Transaction-Oriented Database Recovery,Haerder and Reuter,1983年。 http://www.stanford.edu/class/cs340v/papers/recovery.pdf
事务可以被定义为一组被视为最小处理单元的任务。每个最小处理单元无法再分割。
所有事务必须包含四个属性,通常被称为ACID属性。即ACID是任何事务的属性组。