什么是ACID?
在传统的关系型数据库(RDBMS)中,ACID是四个非常重要的性质。所谓的ACID性质,指的是:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 一致性(Duration)
要理解数据库的ACID性质,我们首先要明白事务(Transaction)的概念。
事务(Transaction)
所谓的事务,指的就是一个或一些操作组成的序列。对于数据库来说,这组操作序列要么全都执行,要么全都不执行,是数据库的一个不可分割的工作单位。
ACID的意义
原子性
原子性指的是一个事务的操作要么全部被执行,要么全部不被执行。这个事务可以什么都不包含,也可以包含一组复杂的操作。但不论是什么样的事务,在面对系统崩溃,忽然断电,出现错误或者其他异常情形的时候,都不会出现其中的部分操作被执行而另一部分操作未被执行的情况。
一致性
一致性指的是在事务开始前和事务结束后,数据库的完整性约束没有破坏。也就是说,事务不能破坏关系数据的完整性及业务逻辑的一致性。
隔离性
隔离性指的是多个事务之间相互隔离。
一个事务在另一个事务完成之前不会读到其结果。一个事务查看数据状态时,数据要么处于另一事务修改它之前的状态,要么处于另一事务修改它之后的状态,而不会处于中间状态。
如果两个事务并发执行,每一个事务都拥有各自完整的数据空间。就好像两个事务顺序执行一样。如果一个事务需要访问另一个事务正在写的数据,则这个事务需要等到另一个事务完成其操作。
持久性
持久性指的是一旦事务完成,其对数据所进行的修改便持久地存在于数据库中(例如存储在硬盘上)。同样的,事务已经完成的状态也不会再改变。