数据库学习笔记_14_transaction Management_交♂易管理

transaction Management 交易管理,准确的说应该是业务管理: 

在数据库操作中,在看来用户看来是一步的操作,往往有很多步基础操作完成。 比如说转钱对顾客来说是一步操作,但是里面会包含后面提到的多个操作。 我们定义,一个合乎逻辑的操作集合被称为交易(transaction)。

交易具有如下性质:

  一个交易或者完成,或者不存在,即对于数据操作来说,一个交易必须完成它所有的操作,如果出了什么问题,那么之前的全部操作无效。

   同时该操作不能带来不连续性(inconsistency),即经过这个操作以后数据库的状态必须和之前的一致,同时满足各种约束。

   一个交易一般是由一种高级语言写成的,一个函数或者一个statement。

   一个交易的细节对于用户来说是不可见的。

    当一个交易失败,其对于数据的操作必须被回溯,而这种失败可能包含多个情况,包括除零错误,程序员误操作,断电,银行抢劫,地球爆炸等等。这看起来很难,因为有些在内存里有些已经在硬盘里了。这种性质被称为原子性(atomicity)。一个基础的实现是在交易之前先存储旧的状态,然后交易完成返回结果。若结果失效则回滚旧状态,不然保留新的状态。

   独立性(isolation) ,也就是说多个交易可以独立运行多个操作可以同时运行,下面我们那以下操作举例:

A往B的账户转50

  1 先是从A那边扣50

  2 再从B那边加50。

  假设A有500,B有500,那么,在第一步生效但是第二步没有生效的时候,此时A账户是450,B账户是500,此时假设又有一个程序读取数据,想要给B加50,因为B的账户余额是500,在这个交易完毕以后其余额为550。但是之前的转账操作同样也只会把B的账户余额变成550,所以B就少了50块钱。这个就是程序之间非独立的一个反例。一个比较方便的办法就是让他们一个个进行,但是很明显多项同时进行会带来更高的效率,所以并行系统就成了接下来要讲的东西。

  持久性,当一个操作成功时,其更改永久生效,在正常操作以外的情况下应永久保留(durability)

所有的性质被称为ACID,即之前几个性质的缩写。

posted @ 2017-06-12 23:54  duskcloudxu  阅读(1054)  评论(0编辑  收藏  举报