数据库--封锁

题目导向

D是一级封锁

B是二级封锁

A是三级封锁

什么是封锁?

1封锁就是事务T在对某个数据对象(例如表(修改表中数据),记录等)操作之前,先向系统发出请求,对其加锁,

2、加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象

封锁种类

X:写锁 也称 排它锁(xor :异或)

若事务T对数据对象A加上X锁,则只允许T读取修改A,其他任何事务都不能加任何类型的锁,直到T释放A上的锁

扫描二维码关注公众号,回复: 10150368 查看本文章

保证其他事务在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锁是长锁

解决 丢失更新、读入脏数据、不能重复读 问题 样例:

今天你学会了吗?

发布了498 篇原创文章 · 获赞 66 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41286356/article/details/104964174