数据库--封锁
题目导向
D是一级封锁
B是二级封锁
A是三级封锁
什么是封锁?
1、封锁就是事务T在对某个数据对象(例如表(修改表中数据),记录等)操作之前,先向系统发出请求,对其加锁,
2、加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象
封锁种类
X:写锁 也称 排它锁(xor :异或)
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能加任何类型的锁,直到T释放A上的锁
保证其他事务在T释放A上的锁之前不能再读取和修改A
S:读锁 也称 共享锁(share:共享)
若事务T对数据对象加上S锁,则事务T可以读取T但不能修改A,其他事务只能对A加S锁,而不能加X锁,直到T释放A上的S锁
保证其他事务可以读A,但在T释放A上的S锁之前不能对A进行修改
封锁协议
一级封锁协议:
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
可避免更新丢失的问题
二级封锁协议:
一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。
能够避免不读“脏”数据
三级封锁协议:
一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
能够避免不可重复读取问题
一级封锁协议样例解读
如下图:T1要对数据A进行修改,如果T1不上锁,当T1写入15 时会被T2写入13覆盖掉了
被覆盖样例:
加锁后: 解决 更新丢失
一级封锁协议不能解决 重复读的例子:
一级封锁协议不能解决读脏数据例子:
左边的T1少加了Xlock C 因为有写入的操作
二级封锁协议样例解读
二级封锁协议解决读脏数据样例:
s:短锁,读数据前申请,读完数据释放,不能保证可重复读
三级封锁协议样例解读
与二级区别:三级 S锁是长锁
解决 丢失更新、读入脏数据、不能重复读 问题 样例:
今天你学会了吗?