1.2 事务的ACID
关系型数据库需要遵循ACID规则,ACID是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity或称不可分割性)、一致性(consistency)、隔离性(isolation又称独立性)、持久性(durability)。
1.2.1 原子性(atomicity)
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样,事务的所有操作要么全部成功,要么全部回滚。
1.2.2 一致性(Consistency)
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,这包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作,即事务前后数据的完整性必须保持一致。一致性表示事务完成后,如图1-1发生的转账交易,如果事务提交成功则A账户减金额,B账户则加对应的金额,数据库总体金额不变只是载体变了。如果事务出错则整体回滚,无论到了上面的哪个步骤A和B的数据都会回到事务开启前的状态保证数据的始终一致,符合逻辑运算。
1.2.3 Isolation(隔离性)
隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰,隔离性追求的是并发情形下事务之间互不干扰。简单起见,我们主要考虑最简单的读操作和写操作,那么隔离性的探讨,主要可以分为两个方面:
一个事务写操作对另一个事务写操作的影响:锁机制保证隔离性
一个事务写操作对另一个事务读操作的影响:MVCC保证隔离性

1.2.4 Durability(持久性)
一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响,事务结束后的数据不随着外界原因导致数据丢失。
小结
事务(Transaction)是并发控制单位,是用户定义的一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。事务通常以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。事务中的所有操作要么全部执行,要么都不执行。如果事务没有原子性的保证,那么在发生系统故障的情况下,数据库就有可能处于不一致状态。因而,事务的原子性与一致性是密切相关的。