赞
踩
1.不一致
例:甲售票处(事务T1)读出某航班机票余额A=16
乙售票处(事务T2)读出同一航班机票余额A=16
(1)丢失修改
甲售出一张机票A=15
乙也售出一张机票A还是=15
T2提交的结果破坏T1结果,导致T1修改丢失
(2)不可重复读
第一种情况:T1读取A=16,T2将A的值改为20,当T1再次读取A时,得到与第一次结果不同。
第二三种情况:T1按一定条件从数据库中读取了某些数据记录后,T2删除了(插入)一些记录,当T1再次按相同条件读取记录时得到结果与第一次不同。
(3)脏读
T1将A=16改成A=20将其写入磁盘,T2读取A=20,T1由于某些原因被撤销其改动恢复原值16,T2所读A的值与数据库中的数据不一致,所读的数据就为“脏”数据。
2.封锁(事务对某个数据对象例如表、记录等操作之前,先向事务发出请求,对其加锁)
(1)排它锁(事务T1对数据对象A加上X锁,只允许T1读取和修改A,其他事务都不能对A加任何类型锁,直到T1释放A)
若修改后解锁:避免丢失修改,无法避免读“脏”数据
若事务结束后解锁:避免读“脏”数据
(2)共享锁(事务T1对数据对象A加上S锁,只允许T1读取但不能修改A,其他事务只能对A加S锁,不能加X锁,直到T1释放A)
若读取后解锁:避免读“脏”数据,不可重复读
若事务结束后解锁:可重复读
3.封锁协议
(1)一级:事务T在修改数据R之前必须先对其加排它锁,事务结束后释放
(2)二级:一级封锁协议,事务T在修改数据R之前必须先对其加共享锁,事务结束前释放
(3)三级:一级封锁协议,事务T在修改数据R之前必须先对其加共享锁,事务结束后释放
4.活锁:
事务T1封锁了数据R,事务T2又请求封锁R,T2等待,T3也请求封锁R,当T1解除对R的封锁首先批准T3的请求,T2仍然等待;这时T4请求封锁R,T3释放R之后批准T4的请求。。。T2有可能一直等待。
死锁:
事务T1封锁R1,T2封锁R2,T1又请求封锁R2,因为T2已经封锁了R2,T1只有等待T2解除封锁才能批准请求,T2同样请求封锁R1,同以上情况。出现T1等待T2解除封锁,T2等待T1解除封锁的局面。
遵守两段锁协议,违背一次封锁法会出现死锁情况。
5.意向锁
(1)IS锁:如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加 S锁
(2)IX锁:如果对一个数据对象加 IX锁,表示它的后裔结点拟(意向)加 X锁。
(3)SIX锁:如果对一个数据对象加 SIX锁,表示对它加 S锁,再加IX锁,即 SIX=S+IX。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。