高级数据库学习笔记----事务管理
1基本概念
事务:事务是数据库系统提供的操纵数据操做的手段,这一手段是多个数据库操作的集合整体。
事务调度:事务调度是对事务的一种执行顺序的一个调度。
并发调度的正确性:不管数据库初始状态,一个调度对数据库状态的影响都和某个串行调度相同,则说明这个调度是可串行化的。
冲突:调度中以对连续的动作,它们满足:如果它们的顺序交互,那么设计的事务中至少有一个事务的行为改变。
冲突可串行性:一个调度,如果通过交换相邻两个无冲突的操作能够转换到某一个串行的调度,则称此调度为冲突可串行化的调度。
冲突可串行性是比可串行性还要严格的概念。
锁的基本类型:
排它锁:只有一个事务可以读写
共享锁:其他事务可以读,但是任何事务都不能写
更新锁:初始读,后面可以写
增量锁:区分增量更新和其他类型的更新
2.冲突可可串行性判别算法:
构造一个前驱图:
前驱图构造方法:
第一个例子
1.识别一共有几个事务
可以看到一共有3个事务,于是绘制3个事务节点,标号为1,2,3
2.然后找可能会发生冲突的动作
W2A 和R3A对同一个数据读写,所以冲突,所以2要在3前,因此在图里画一条2—-3的边。
W1B和R2B对同一个数据读写,所以冲突,1要在2前,所以图里画一条1—-2的边。
3.最后发现最终的图没有环路,所以具有冲突可串行性。
3.不同级别的封锁协议说可以实现的隔离性
不可重复读,脏读,丢失修改,幻读
丢失修改:在不同事务中,都对同一个数据修改,导致数据实际仅仅被修改一次。
不可重复读:在读的过程中,由于另一个事务对某个数据的修改,导致两次读的数据的值不同。
脏读:另外一个事务对数据进行了修改,而当前的事务也将该数据读入了,但是另外一个数据最终放弃提交,当前事务读的数据错误。
幻读:同样和另外一个事务的读有关系,但是与不可重复读有区别的地方是,幻读的另外一个事务是添加了一个数据,即错误是读的集合出错了。
两段封锁协议
要点:
1.分为加锁段和解锁段。
2.加锁段中不能有解锁操作,解锁段中不能有加锁操作。
其实就是相当于对某一个数据的操作完全完结之后才给另外一个事务处理。
可能出现死锁的错误。
基于时间戳的并发控制:
以上面为例:
1.执行对应的事务,当向数据写的时候,给数据打上时间戳。
2.当遇到T2向C写数据的时候,发现有一个时间戳比T2大的事务已经写了C了,那么这时候就撤销整个T2的事务,重新设置T2事务的时间。