nev*_*ame 152 database transactions acid
ACID和数据库事务之间有什么关系?
ACID是否提供数据库事务还是同样的事情?
有人可以启发这个话题.
Bri*_*ell 310
ACID是您在修改数据库时要应用的一组属性.
事务是一组相关的更改,用于实现某些ACID属性.事务是实现ACID属性的工具.
原子性意味着您可以保证所有交易都发生,或者没有任何交易发生; 你可以将复杂的操作作为一个单独的单元,全部或全部进行,并且崩溃,电源故障,错误或其他任何事情都不允许您处于仅发生一些相关更改的状态.
一致性意味着您保证您的数据一致; 不会违反您对相关数据的任何约束.
隔离意味着一个事务无法从另一个尚未完成的事务中读取数据.如果两个事务同时执行,每个事务都会看到世界好像是按顺序执行,如果需要读取另一个事务所写的数据,则必须等到另一个事务完成.
持久性意味着一旦事务完成,就可以保证所有更改都已记录到持久介质(例如硬盘)中,并且同样记录了事务已完成的事实.
因此,交易是保证这些财产的机制; 它们是将相关动作组合在一起的一种方式,使得作为一个整体,一组操作可以是原子的,产生一致的结果,与其他操作隔离,并且被持久地记录.
Erw*_*out 34
ACID是任何事务处理引擎的理想属性.
DBMS(如果有任何好处)是一种特定类型的事务处理引擎,通常在很大程度上但不完全暴露这些属性.
但是存在其他可以暴露这些属性的引擎.曾经被称为"TP监视器"的软件就是一个很好的例子(现在主要是Web服务器).
这样的TP监视器可以访问除DBMS(例如打印机)之外的资源,并且仍然保证ACID对其用户.作为打印机参与事务时ACID可能含义的示例:
Man*_*ngh 18
我略微修改了打印机示例,使其更易于解释
1页有2页内容的文件被发送到打印机
交易 - 发送给打印机的文件
希望这有助于某人掌握ACID的概念
ACID和数据库事务之间有什么关系?
在关系数据库中,每个SQL语句必须在事务范围内执行。
在不显式定义事务边界的情况下,数据库将使用隐式事务,该隐式事务环绕每个单独的语句。
隐式事务在语句执行之前开始,在语句执行之后结束(提交或回滚)。隐式事务模式通常称为自动提交。
如本文所述,事务是仅在所有包含的操作都成功时才成功的读/写操作的集合。
交易固有具有四个属性(通常称为ACID):
ACID提供数据库事务还是同一件事?
对于关系数据库系统,这是正确的,因为SQL标准指定事务应提供ACID保证:
原子性接受单个操作并将其转变为一项全有或全无的工作单元,只有当所有包含的操作都成功时,该操作才能成功。
事务可能封装状态更改(除非它是只读的)。无论在任何给定时间交错多少个并发事务,事务都必须始终使系统保持一致状态。
一致性意味着对每个已提交的事务强制执行约束。这意味着所有键,数据类型,检查和触发器均成功,并且不会触发任何约束冲突。
事务需要并发控制机制,它们即使在被交错时也能保证正确性。隔离为我们带来了隐藏外界未提交的状态更改的好处,因为失败的事务永远都不会破坏系统的状态。通过使用悲观或乐观锁定机制的并发控制来实现隔离。
成功的事务必须永久更改系统的状态,并且在结束系统之前,将状态更改记录在持久的事务日志中。如果我们的系统突然受到系统崩溃或断电的影响,那么所有未完成的已提交事务都可能会被重放。
有关耐久性和重做日志的更多详细信息,请参阅本文。