事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做;
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的;
隔离性(isolation):一个事务的执行不能被其他事务干扰。即,一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰;
持久性(durability):也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其有任何影响。
原子性(atomicity)
一个事务必须被视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。
最简单的例子就是转账,不允许一个人扣了钱而另一个人没收到。
一致性(consistency)
一致性是指事务将数据库从一种一致性转换到另外一种一致性状态,在事务开始之前和事务结束之后数据库中数据的完整性没有被破坏。
还是说两个人转账,数据库是不存在一个人扣了钱而另一个人没收到钱的中间态的,只能是转账前的状态或者转账后的状态。
隔离性(isolation)
一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
一般来说是这样的,但具体的隔离级别还需要用户自己选择。
持久性(durability)
一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。
单纯只从数据库的角度,这个说法是成立的,但往往现实中还有很多其他的因素,比如机器宕机,网络中断等等,还需要其他的手段保证持久性。