数据库作业7
1. 事务的概念及四个特征
事务是数据库操作的基本逻辑单元,由一系列对数据库的操作组成,这些操作要么全部成功执行(提交),要么全部失败回滚(撤销)。事务的四个特征(ACID特性)如下:
- 原子性(Atomicity):事务中的操作要么全部完成,要么全部不执行,不允许部分完成。
- 一致性(Consistency):事务执行前后,数据库必须保持一致性状态(如约束、业务规则)。
- 隔离性(Isolation):多个并发事务的执行互不干扰,每个事务的操作对其他事务是透明的。
- 持久性(Durability):事务一旦提交,其对数据库的修改是永久性的,即使系统故障也不丢失。
3. 并发控制的措施
并发控制的主要措施包括:
- 加锁机制:
- 共享锁(S锁):允许事务读取数据,其他事务可加共享锁但不能加排他锁。
- 排他锁(X锁):允许事务修改数据,其他事务不能加任何锁。
- 两段锁协议(2PL):事务分为两个阶段:
- 扩展阶段:只能申请锁,不能释放锁。
- 收缩阶段:只能释放锁,不能申请锁。
- 封锁协议:如三级封锁协议,通过不同级别的锁解决数据一致性问题。
4. 三个事务的并发执行结果
设初始值 A=2,B=1,可能的正确执行结果如下:
-
结果1:T1 → T2 → T3
- T1:B = 2 + 1 = 3
- T2:B = 3 × 2 = 6
- T3:A = 6 + 1 = 7
最终值:A=7,B=6
-
结果2:T2 → T1 → T3
- T2:B = 1 × 2 = 2
- T1:B = 2 + 1 = 3
- T3:A = 3 + 1 = 4
最终值:A=4,B=3
-
结果3:T1 → T3 → T2
- T1:B = 2 + 1 = 3
- T3:A = 3 + 1 = 4
- T2:B = 4 × 2 = 8
最终值:A=4,B=8
其他可能的调度可能因冲突导致数据不一致,需通过锁机制保证正确性。
5. 遵守两段锁协议的调度策略
以事务 T1、T2、T3 为例:
- 扩展阶段:
- T1 对 A 加共享锁(S),读取 A=2,对 B 加排他锁(X),写入 B=3。
- T2 对 B 加排他锁(X),写入 B=6。
- T3 对 B 加共享锁(S),读取 B=6,对 A 加排他锁(X),写入 A=7。
- 收缩阶段:
- T1 释放 A 和 B 的锁。
- T2 释放 B 的锁。
- T3 释放 B 和 A 的锁。
调度顺序:T1(加锁→操作→释放锁)→ T2(加锁→操作→释放锁)→ T3(加锁→操作→释放锁)。
7. 死锁及预防方法
死锁:多个事务因互相等待对方释放锁而无法继续执行。
预防方法:
- 超时机制:事务等待锁超时后自动回滚。
- 死锁检测与恢复:定期检测死锁,强制回滚部分事务。
- 有序资源分配:按固定顺序申请锁,避免循环等待。
8. 三级封锁协议
- 一级封锁协议:
- 事务修改数据前必须加排他锁(X),直到事务结束。
- 保证:防止丢失修改。
- 二级封锁协议:
- 在一级基础上,读取数据前加共享锁(S),读完立即释放。
- 保证:防止丢失修改和脏读。
- 三级封锁协议:
- 在二级基础上,共享锁(S)保持到事务结束。
- 保证:防止丢失修改、脏读和不可重复读。
主要区别:锁的释放时机和范围不同,解决的问题逐步增加。
9. 可串行化调度及判断方法
可串行化调度:并发执行的事务结果等价于某个串行执行的结果。
判断方法:
- 冲突可串行化:若调度的冲突操作顺序与某个串行调度一致,则为冲突可串行化。
- 视图可串行化:更宽松的条件,允许非冲突操作交换顺序。
10. 两段锁的含义
两段锁协议要求事务分为两个阶段:
- 扩展阶段:只能申请锁,不能释放锁。
- 收缩阶段:只能释放锁,不能申请锁。
作用:确保调度的可串行化,避免锁的交叉申请导致死锁或数据不一致。
以上答案结合了文件内容和数据库基础理论,确保准确性和逻辑性。
浙公网安备 33010602011771号