数据库事务的ACID

对于支持Transaction的数据库而言,必须有以下特征

一、Atomicity 原子性

一个事务中的所有操作,执行情况有两种:全部完成和全部不完成。不能停滞在中间某个环节,执行过程中出现错误时,会回滚到事务开始前的状态

二、Consistency 一致性

(wikipedia):Ensures that any transaction will bring the database from one valid state to another.

定义的规则:constraints(约束),cascades(级联),triggers(触发)

所有写入数据库的数据必须满足上述规则或者规则组合(Any data written to the database must be valid according to all defined rules)

不保证应用程序需求的事务正确性,仅仅保证任何程序错误不会导致破坏规则。

(百科):一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。

三、Isolation 隔离性(串行化)

提供隔离性是并发控制的主要目标。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。

四、Durability 持久性

事务完成后,其对数据库所作的更改持久的保存在数据库中,不会被回滚。

实现方式:

1.write-ahead logging

保证原子性的方法:在该表数据库前将没有更改的数据拷贝到日志中

2.shadow paging

(wiki)updates are applied to a partial copy of the database, and the new copy is activated when the transaction commits.

(百科)与1相比,不需要redo,undo,消除了写日志记录的开销,恢复速度快

缺点:事务提交时要输出多个块,提交开销大,以块为单位,很难应用到允许多个事务并发执行的情况。

原文地址:https://www.cnblogs.com/justdoitLLQ/p/6529534.html