Chap11 习题解答
- 1. 在数据库中为什么要并发控制 ?并发控制技术能保证事务的哪些特性?
- 2. 并发操作可能会产生哪几类数据不一致?用什么方法可以避免各种不一致的情况?
- 3. 什么是封锁?基本的封锁类型有几种?试述它们的含义。
- 4. 如何用封锁机制保持数据的一致性?
- 5. 什么是活锁?试述活锁产生的原因和解决办法。
- 6. 什么是死锁?请给出 预防死锁的若干方法。
- 7. 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?
- 8. 什么样的并发调度是正确的调度?
- 9-10. 详见N
- 11. 试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。
- 12-14. 详见N
- 15. 为什么要引进意向锁?意向锁的含义是什么?
- 16. 试述常用的意向锁:IS锁、IX锁、SIX锁,给出这些锁的相容矩阵。
- 思考题
1. 在数据库中为什么要并发控制 ?并发控制技术能保证事务的哪些特性?
- 若对并发操作不加控制,就可能会存取和储存不正确的数据,破坏事务的一致性和数据库的一致性。
- 事务具有 ACID特性。数据库管理系统对并发操作进行正确的调度,是为了保证事务的隔离性和一致性。
2. 并发操作可能会产生哪几类数据不一致?用什么方法可以避免各种不一致的情况?
- 并发操作可能会导致:丢失修改,不可重复读,读“脏”数据
- 并发控制技术主要有:封锁(locking),时间戳,乐观控制法,多版本并发控制(MVCC)
3. 什么是封锁?基本的封锁类型有几种?试述它们的含义。
- 封锁就是事务T对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。
- 基本的封锁类型:排他锁(写锁,X锁),共享锁(读锁,S锁)。排他锁:若事务 T对数据对象A加X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。共享锁:若事务T对数据对象A加S锁,则事务T可以读A,但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
- 封锁类型的相容矩阵(横线“-”表示没有加锁请求):
T2 | ||||
---|---|---|---|---|
T1 | X | S | - | |
X | N | N | Y | |
S | N | Y | Y | |
- | Y | Y | Y |
4. 如何用封锁机制保持数据的一致性?
- 利用三级封锁协议解决因为并发操作的不正确调度带来的数据不一致性问题;
- 一级封锁协议可以解决“丢失修改”的问题。一级封锁协议是指:事务T在修改数据对象A前,必须先对其加X锁,直至事务结束才 释放。注意:在一级封锁协议中,如果仅仅是 读数据,是不需要加锁的,因此,不能解决“读脏数据”和“不可重复读”的问题。
- 二级封锁协议可以解决“丢失修改”、“读脏数据”的问题。二级封锁协议是指:在一级协议的基础上&#