数据库事务的ACID特性

由于事务处理要确保事务内数据操作的一致性,因此一个事务必须要满足ACID特性,即原子性、一致性、隔离性和持久性。

1、原子性(Atomicity)

事务必须是原子工作单元:对其进行的数据修改,要么全部执行,要么全部不执行。以转账为例,要在A账户上增加1000元,同时要在B账户上减少1000元,这两个操作,要么同时执行,要么都不执行,以确保整个事务是一个原子工作单元。

2、一致性(Consistency)

如果两个以上数据表有关联,那么更新一个表同时另外一个表也要一起更新,否则两个表的数据记录就发生不一致了。

3、隔离性(Isolation)

两个事务的执行是互不干扰的,一个事务不能看到其他事务运行时、运行中间某一时刻的数据。以转账为例,如果有其他的操作也在进行转账,那么当前事务内不能看到其他事务在运行时或运行中间某一时刻的数据。主要用于实现并发控制, 隔离能够确保并发执行的事务能够顺序一个接一个执行,通过隔离,一个未完成事务不会影响另外一个未完成事务,隔离是通过用悲观或乐观锁机制实现的。

4、持久性(Durability)

一旦事务被提交以后,数据库的变化就会被永久的保存下来。以转账为例,转账操作一旦完成,数据就会被永久的保存下来,即使数据库系统关闭也不会丢失数据。一个成功的事务将永久性地改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中。如果我们的系统突然受到系统崩溃或断电,那么所有未完成已提交的事务可能会重演。

值得注意的是,在Oracle数据库中,不需要显式的使用事务语句来开始一个事务,当遇到第一个DML语句时,一个事务开始,再出现下面情况之一时,事务结束:

(1)遇到commit或rollback语句时,以提交或者回滚的方式来结束事务;

(2)当用户退出oracle工具时,比如PL/SQL Devloper、SQL*Plus等等;

(3)当机器失效或系统崩溃时。

当一个事务结束以后,下一个DML的SQL语句将继续开启下一个事务。

本文标题:数据库事务的ACID特性

本文链接:http://yedward.net/?id=23

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章