数据库事务特征---ACID

来源:互联网 发布:广州先迈网络兼职平台 编辑:程序博客网 时间:2024/04/27 22:46

事务具有四个特征,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称事物的ACID。

一、原子性:

事务中的各项操作在执行过程中,只允许出现两种情况:全部执行成功或者全部不执行。任何一项操作的失败都将导致整个事务的失败,同时其它已经执行的操作将被撤销并回滚,只有所有的操作全部成功,整个事务才算成功完成。

二、一致性

事务执行的结果必须使数据库从一个一致性状态转到另一个一致性状态,如果在是事务的执行过程中发生故障,有些事务没有完成就被迫中断,这些未完成的事务对数据库所做的修改已经有一部分写入物理数据库,这时数据库的状态就处于一种不正确的状态或者说是一种不一致状态。

三、隔离性

在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其它事务干扰。在SQL中定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,如:未授权读取、授权读取、可重复读取,串行化。

1、未授权读取:未授权读取也称为读未提交,该隔离级别最低,允许脏读,即如果一个事务正在处理某一数据,并对其进行更新,但同时还没有完成该事务,因此还没有进行事务的提交,而与此同时允许另一个事务能够访问该数据。例如:事务A和事务B同时进行,事务A在整个执行过程中,会将某项数据从1开始,做一系列的加法操作(比如加1)直到变成10后再进行事务的提交,此时,事务B能够看到这个数据在事务A操作过程中的所有中间值(如1变成2、2变成3等),而这一系列的中间值就是未授权读取。

2、授权读取:也被称为读已提交,它和未授权读取相近,唯一区别就是:授权读取只能读已经被提交的数据。同样是上面的例子,事务B无法看到数据项在事务A操作过程中的所有中间值,只能看到最终的10.

3、可重复读取:在事务的处理过程中,多次读取同一个数据时,其值和事务开始时刻是一致的。因此该事务隔离级别禁止了不可重复读和脏读(读未提交),但有可能会出现幻读。所谓幻读:是指两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行(注:没有说这两次执行是在同一个事务中。)一般情况下,幻象读应该正是我们所需要的。就像上面的例子,可重复读能够保证第一次事务操作过程中,始终对数据项读取到1,但是在下一次事务操作中采用同样的查询方式,可能是10。

4、串行化:最严格的事务隔离级别,它要求所有的事务都被串行执行,即事务只能一个一个的进行提交,不能并发执行。


隔离级别示意图:

隔离级别对比:


原创粉丝点击