关系型数据库事务的四大特性(ACID)
什么是事务?
事务(transaction)指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功,并且要保证ACID。
ACID,指数据库事务正确执行的四个基本要素,包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
-
Atomicity(原子性)
一个事务内所有操作共同组成一个原子操作,要么全部成功,要么全部失败。是最基本的特性,保证了因为其它因素或宕机导致数据库异常。 -
Consistency(一致性)
这个是大家误解最深的,很多博客都喜欢用银行转账的例子来讲一直性,所谓的一致性是基于原子性。
原子性只保证了一个事务内的所有操作同一性,大家同生死,不会出现你死了,我还活着。
但是,原子性并没有保证大家同一时刻一起生,一起死。计算机指令是有先后顺序的,
这样就决定了一个事务的提交,会经历一个时间过程,那么如果事务提交进行到了一半,我读取了数据库,会不会读到中间结果?
为了防止这样的情况,数据库事物的一致性就规定了事务提交前后,永远只可能存在事务提交前的状态和事务提交后的状态,
从一个一致性的状态到另一个一致性状态,而不可能出现中间的过程态。也就是说事务的执行结果是量子化状态,而不是线性状态。 -
Isolation(隔离性)
多个事务并发执行的时候,事务内部的操作与其它事务是隔离的,并发执行的各个事务之间不互相干扰。
事务的隔离性,基于原子性和一致性,因为事务是原子化,量子化的,所以,事务可以有多个原子操作的形式并发执行,但是,每个事物互不干扰。
但是,由于多个事务可能操作同一个资源,不同的事务为了保证隔离性,会有很多锁方案,当然这是数据库的实现。 -
Durability(持久性)
当一个事务提交之后,数据库状态永远的发生了改变,这个事务只要提交了,哪怕提交后宕机,它也确确实实的提交了,不会出现因为刚刚宕机了而提交不生效。

浙公网安备 33010602011771号