事务
事务的四大特性
原子性
一致性:数据库从一个一致性状态到另一个一致性状态
隔离性:各个事务之间是互不干扰的。
持久性:对数据库中数据的改变是持久的。
并发控制机制
事务是并发控制的基本单位。
并发操作带来的问题:丢失修改,不可重复读,读脏数据
并发操作会破坏事务的隔离性,并发控制机制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰。
另一方面,有时候应用对统计精度没有影响,这时可以降低一致性的要求以减少系统开销。
并发控制的主要技术:封锁,时间戳,客观控制法,多版本并发控制。
(一)封锁
写锁(排它锁):事务T对数据对象A加上X锁,则只允许事务T修改和读取A。其他任务事务都不能对A加任何类型的锁。
读锁(共享锁):事务T对数据对象A加上S锁,则事务T可以读A,但是不能修改A。其他事务可以加S锁。
(二)封锁协议
1.一级封锁协议
事务在修改数据之前必须对其加X锁,直到事务结束才释放。
2.二级封锁协议
在一级锁基础上,增加事务在读取数据之前必须先加S 锁,读完即可释放S锁。
3.三级封锁协议
在一级锁基础上,增加事务在读取数据之前必须先加S锁,事务结束才释放
(三)活锁与死锁
活锁:饥饿
死锁:相互等待相互的资源
(四)可串行化调度
可串行化调度:多个事务并发执行,和串行执行的结果相同。
可串行化是并发事务正确调度的准则。
冲突可串行化调度:一个调度在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度,且这个调度是串行的。
冲突可串行化是可串行化调度的充分条件。
(五)两段锁协议
数据库的并发控制,通过两段锁协议,来实现可串行化调度。
事务遵守两段锁协议是可串行化调度的充分条件。
所谓的两段锁,第一段是扩展段,这个阶段获得封锁,但是不释放锁;第二段是收缩段,这个阶段释放封锁,但是不申请锁。
(六)意向锁
封锁粒度不同,产生多粒度树。多粒度树的根节点是整个数据库,表示最大的数据粒度。
多一个结点加锁,意味着这个结点的所有后裔结点都被加了同类型的锁。
一般对某个对象加锁,要检查所有上下级所有结点,是否显示加锁,或者隐式加锁,是否有冲突。
因此引入了意向锁。
意向锁的定义是如果对一个结点加意向锁,说明该结点的下层结点正在被加锁。对一个结点加锁时,必须对它的上层结点加意向锁。