acid特性
1、Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2、Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
3、Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
4、Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
实施
处理事务通常需要一系列操作,由于多种原因,这些操作容易失败。例如,系统可能在其磁盘驱动器上没有剩余空间,或者它可能已经用完了分配的CPU时间。
有两种流行的技术家族:预写日志记录和影子分页。在这两种情况下,都必须对所有要更新的信息以及隔离级别(可能还取决于可能读取的所有数据)获取锁。在预写日志记录中,通过在更改数据库之前将原始(未更改)数据复制到日志中来保证持久性。
这样可以使数据库在发生崩溃的情况下返回到一致的状态。在阴影中,更新将应用于数据库的部分副本,并且在事务提交时激活新副本。