余干县建设局网站,音乐网站毕业设计代码,装修平台加盟,对象储存做网站#x1f308; 个人主页#xff1a;十二月的猫-CSDN博客 #x1f525; 系列专栏#xff1a; #x1f3c0;数据库 #x1f4aa;#x1f3fb; 十二月的寒冬阻挡不了春天的脚步#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录
前言
概论
事务
并发控制
恢复系统
三… 个人主页十二月的猫-CSDN博客 系列专栏 数据库 十二月的寒冬阻挡不了春天的脚步十二点的黑夜遮蔽不住黎明的曙光 目录
前言
概论
事务
并发控制
恢复系统
三者联系
练习题
题目一
题目二
题目三
题目四
题目五
题目六
题目七
题目八 总结 前言
前一讲我们进入了E-R模型设计以及E-R模型向关系模式转化。
那一讲的难点在于1、如何确定三元关系不是出现三个实体加联系就是三元关系2、如何找到隐藏联系有一些联系并不会直接说明而是隐藏在生活常识中
回顾一下 E-R模型设计的流程 1、确定E-R模型的最大整体不出现在模型中 2、确定E-R模型的实体集 3、确定E-R模型的联系集 4、确定E-R模型的属性集实体和联系 5、确定E-R模型实体/联系的主码 6、转化为关系模式 关系模式转化流程 1、拿到E-R模型 2、将E-R模型中的实体和联系一一转化为关系模式关系表 3、根据合并原则将联系表格和实体表格合并 接下来我们进入事务和两阶段封锁
概论
让我们先对事务、并发控制以及恢复系统有一个整体性的认识然后再进入精选题的讲解。
事务
定义事务是指一个逻辑上的一组操作这些操作要么全部执行要么全部不执行。事务的目的是保证数据库从一个一致性状态转换到另一个一致性状态
特性
原子性Atomicity事务中的所有操作要么全部成功要么全部失败。一致性Consistency事务开始前和结束后数据库的状态必须是一致的。隔离性Isolation一个事务的执行不应被其他事务干扰。持久性Durability事务完成后对数据库的更改是永久性的系统崩溃也不会丢失。
并发控制 定义并发控制是指在多用户环境下保证多个事务同时执行时的正确性和一致性。它的主要目的是防止由于多个事务同时访问数据库而导致的数据不一致问题。 主要技术
两阶段封锁通过锁机制来控制并发访问。例如读锁共享锁允许多个事务同时读数据但不允许写写锁排他锁则禁止其他事务读或写数据。时间戳Timestamping给每个事务分配一个时间戳通过比较时间戳来决定事务的执行顺序。多版本并发控制MVCC维护数据的多个版本使读操作不阻塞写操作反之亦然。
恢复系统 定义恢复系统是指在系统故障后恢复数据库到一致性状态的机制。它保证数据库在发生崩溃、系统故障等情况下仍能保持数据的一致性和完整性。 主要技术
日志Logging记录事务的所有操作在发生故障时可以通过日志来重做Redo或撤销Undo操作恢复数据库。检查点Checkpointing定期将数据库的当前状态保存到稳定存储中减少恢复时需要处理的日志量。影子页Shadow Paging通过页表来维护数据的多个副本故障时可以使用影子页表来恢复数据。
三者联系
总的来说数据库的事务必须保证1、原子性2、一致性3、隔离性4、持久性
并发控制和恢复系统就是为了保证事务的这四种性质而存在的
详细来看 事务与并发控制并发控制确保多个事务同时执行时不会互相干扰从而维持数据库的一致性、隔离性
事务与恢复系统事务的持久性要求一旦事务提交其结果必须持久保存。恢复系统通过日志和其他技术确保即使在故障情况下也能恢复事务的结果保证持久性、原子性
并发控制与恢复系统并发控制机制确保事务执行期间的一致性而恢复系统确保在系统崩溃后恢复到一致性状态。两者共同确保数据库在多用户环境下和发生故障时的一致性和完整性。
练习题
题目一
问题描述
什么是事务
问题解答
事务是由一系列操作构成的程序执行单元这些操作要么都做要么都不做。事务具有原子性、一致性、隔离性和持久性是不可分割的工作单元
题目二
问题描述
请画出事务状态图各种状态之间有什么联系?
问题解答 题目三
问题描述
事务的ACID特性分别是什么每个特性的用途是什么
问题解答
原子性(Atomicity) 事务中包含的所有操作要么全做要么全不做一致性(Consistency) 事务的隔离执行必须保证数据库的一致性即事务完成前后数据库是一致的隔离性(Isolation) 系统必须保证事务不受其它并发执行事务的影响持久性(Durability) 一个事务一旦提交之后它对数据库的影响必须是永久的
题目四
问题描述
下图所示的调度是冲突可串行化的吗如果是冲突可串行化的请给出等价的串行调度序列如果不是请说明原因。 问题解答 冲突可串行化判断画出优先图看是否有环。如果有则不可串行化否则可以通过拓扑排序写出串行序列 画出优先图如下 由于T1、T3之间存在环因此不可串行化
题目五
问题描述
什么是两段锁协议
问题解答
为了保证可串行性即实现事务的并发运行又保证事务的隔离性等特性可以使用两阶段封锁实现并发控制。两阶段封锁协议要求每个事务分成两个阶段增长阶段、缩减阶段。增长阶段事务只能获得锁不能释放锁缩减阶段事务只能释放锁不能获得锁
题目六
问题描述
死锁的发生是坏事还是好事试说明理由。如何解除死锁状态
问题解答
一般来说死锁状态本身是一件坏事因为死锁将造成资源的浪费、数据库的死循环业务中断、数据不一致风险等但是加入两阶段封锁协议导致的死锁不一定只是坏事因为如果发生死锁说明在两阶段封锁协议下这个事务并不是可串行化的此时不发生死锁让事务任意并发的运行会导致数据不一致、读取脏数据等错误。从这个角度来说出现死锁反倒是一种保护。
解除死锁状态包括1、避免死锁2、检测死锁3、处理死锁
避免死锁一次封锁法顺序封锁法抢占与事务回滚
检测死锁超时法、等待图法
处理死锁在出现死锁后选择牺牲代价最小的那个事务作为牺牲者将该事务执行回滚操作全部回滚/部分回滚从而解除死锁这个处理死锁的方法可能出现饿死现象
题目七
问题描述
考虑以下调度思考 调度{TA,TB,TC}能够满足时间戳排序协议吗 调度{TA,TB,TC}能够满足两阶段封锁协议吗 调度{TA,TB,TC}冲突可串行化吗 时间 TA(TS1) TB(TS2) TC(TS3) t1 R(X) t2 W(X) t3 R(X) t4 W(X) t5 R(Y) t6 W(Y) t7 R(Y) t8 W(Y)
问题解答
时间戳 因此不能用时间戳实现并发控制 两阶段封锁协议 因此不能用两阶段封锁实现并发控制 冲突可串行化 因此可以串行化Tc——Ta——Tb
题目八
问题描述
什么是时间戳排序协议
问题解答
每个事务在开始时获得一个唯一的时间戳时间戳的获得可以是计数器、也可以是系统时钟这两者有各自的优缺点根据这个时间戳对事务进行排序排序的规则如下
如果是读则不能读未来事务写过的元组如果是写则不能写未来事务读过或写过的元组
经过这样排序的事务一定是可串行化的并且没有死锁但是可能存在饥饿并且不保证可恢复性 总结 本文的所有知识点、图片均来自《数据库系统概念》黑宝书、山东大学李晖老师PPT。不可用于商业用途转发。