数据库第11章作业——并发控制

Posted Fmm-PMO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库第11章作业——并发控制相关的知识,希望对你有一定的参考价值。

最后一章结束了,为期13周的数据库课程也结束了,这也意味着快该好好复习准备考试,然后回家啦!
本章作业是课后习题第9、10、14题,部分答案有参考,正好学习一下答题规范。还是老模式,先复习一下这一章的重点之重点。
一、基本封锁类型
排它锁:简记为X锁,又称为写锁。

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

共享锁:简记为S锁,又称为读锁。

若事务T对数据对象A加上S锁,则事务T可以读A但不能修改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封锁了数据R。
事务T2又请求封锁R,于是T2等待。
T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。
T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……
T2有可能永远等待

死锁:

两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。

四、可串行化调度与冲突可串行化调度

可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同

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

若一个调度是冲突可串行化,则一定是可串行化的调度。可用这种方法判断一个调度是否是冲突可串行化的。冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。

五、两段锁协议

指所有事务必须分两个阶段对数据项加锁和解锁
含义:事务分为两个阶段
    第一阶段是获得封锁,也称为扩展阶段
        事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
    第二阶段是释放封锁,也称为收缩阶段
        事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁

六、课后作业

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上是关于数据库第11章作业——并发控制的主要内容,如果未能解决你的问题,请参考以下文章

作业——并发控制

作业——并发控制

作业——并发控制

PosegreSQL基础回顾(第 13 章 并发控制)

PosegreSQL基础回顾(第 13 章 并发控制)

读《Go并发编程实战》第4章 流程控制方式