事务

事务的四大特性

  原子性

  一致性:数据库从一个一致性状态到另一个一致性状态

  隔离性:各个事务之间是互不干扰的。

  持久性:对数据库中数据的改变是持久的。

并发控制机制

  事务是并发控制的基本单位。

  并发操作带来的问题:丢失修改,不可重复读,读脏数据

  并发操作会破坏事务的隔离性,并发控制机制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰。

     另一方面,有时候应用对统计精度没有影响,这时可以降低一致性的要求以减少系统开销。

  并发控制的主要技术:封锁,时间戳,客观控制法,多版本并发控制。

 (一)封锁

       写锁(排它锁):事务T对数据对象A加上X锁,则只允许事务T修改和读取A。其他任务事务都不能对A加任何类型的锁。

  读锁(共享锁):事务T对数据对象A加上S锁,则事务T可以读A,但是不能修改A。其他事务可以加S锁。

 (二)封锁协议

  1.一级封锁协议

  事务在修改数据之前必须对其加X锁,直到事务结束才释放。

  2.二级封锁协议

  在一级锁基础上,增加事务在读取数据之前必须先加S 锁,读完即可释放S锁。

  3.三级封锁协议

  在一级锁基础上,增加事务在读取数据之前必须先加S锁,事务结束才释放

 (三)活锁与死锁

  活锁:饥饿

  死锁:相互等待相互的资源

 (四)可串行化调度

  可串行化调度:多个事务并发执行,和串行执行的结果相同。

  可串行化是并发事务正确调度的准则。

  冲突可串行化调度:一个调度在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度,且这个调度是串行的。

  冲突可串行化是可串行化调度的充分条件

 (五)两段锁协议

  数据库的并发控制,通过两段锁协议,来实现可串行化调度。

  事务遵守两段锁协议是可串行化调度的充分条件

  所谓的两段锁,第一段是扩展段,这个阶段获得封锁,但是不释放锁;第二段是收缩段,这个阶段释放封锁,但是不申请锁。

 (六)意向锁

  封锁粒度不同,产生多粒度树。多粒度树的根节点是整个数据库,表示最大的数据粒度。

  多一个结点加锁,意味着这个结点的所有后裔结点都被加了同类型的锁。

  一般对某个对象加锁,要检查所有上下级所有结点,是否显示加锁,或者隐式加锁,是否有冲突。

  因此引入了意向锁。

  意向锁的定义是如果对一个结点加意向锁,说明该结点的下层结点正在被加锁。对一个结点加锁时,必须对它的上层结点加意向锁。

  

原文地址:https://www.cnblogs.com/juanzhi/p/12449830.html