日期:2014-05-16  浏览次数:20563 次

事物四个特性原子,一致,隔离,持久

为什么研究事务


程序中很多地方要用。有的时候想到事务容易忘掉里面的一些细节,所以总结出来。


什么叫事务


咬文嚼字一下,事,就是具体的事,务就是一个任务。这一个任务可以有一件事,也可能有多件事情组合起来做完,才叫一个任务。 这一个由一件或多件事组合起来的一个任务,就叫一个事务。


为什么学习事务???


程序就是去做事。就是去完成任务,那完成这个任务,可能需要多个步骤。如果中间哪个步骤出了错误。那整个任务都是没有完成的。这其实就是一个事务。
但是,基本上如果是中间出了错,提示一下就过了,因为你要做的事也没有保存成什么,但是如果你这个事务中,有一些数据已经保存起来了。那么就应该把
这些数据在清理掉。因为你的事务没有成功。举个最常见的例子就是就银行转帐,从A帐号减去50,往B帐号加50。这个任务叫转帐。那么这个就是一个事务。
那如果程序执行到A减去了50,B还没有加的时候,突然出错了。程序没法往下执行了,这个时候,要回退。这个任务没有完成,你要把之前做的事全撤消。这样才
符合常规。一切都得按规矩办事。那事务的规矩刚刚提到的都太粗了。那事务要求最严格的肯定是存储数据部分。那么数据库就更专业了,专业一些给事务下定义。


事务的专业定义与特点:


事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。
这里面的关键点就是这四个统称为ACID的属性(面试的时候经常问)。主要依赖于数据库的具体实现。

Atomic(原子性)


指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状 态。


Consistency(一致性)


指数据库事务不能破坏关系数据的完成性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后A帐号与B帐号加起来还是那些钱。


Isolation(隔离性)


指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。这个也是后面咱们研究的一个重点。


??? Durability(持久性)


指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
这些在据库都有实现,数据库是怎么实现事务的的呢?


???? 数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行?? 事务前的初始状态。