数据库学习笔记_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,即之前几个性质的缩写。