数据库作业7

1. 事务的概念及四个特征

事务是数据库操作的基本逻辑单元,由一系列对数据库的操作组成,这些操作要么全部成功执行(提交),要么全部失败回滚(撤销)。事务的四个特征(ACID特性)如下:

  1. 原子性(Atomicity):事务中的操作要么全部完成,要么全部不执行,不允许部分完成。
  2. 一致性(Consistency):事务执行前后,数据库必须保持一致性状态(如约束、业务规则)。
  3. 隔离性(Isolation):多个并发事务的执行互不干扰,每个事务的操作对其他事务是透明的。
  4. 持久性(Durability):事务一旦提交,其对数据库的修改是永久性的,即使系统故障也不丢失。

3. 并发控制的措施

并发控制的主要措施包括:

  1. 加锁机制
    • 共享锁(S锁):允许事务读取数据,其他事务可加共享锁但不能加排他锁。
    • 排他锁(X锁):允许事务修改数据,其他事务不能加任何锁。
  2. 两段锁协议(2PL):事务分为两个阶段:
    • 扩展阶段:只能申请锁,不能释放锁。
    • 收缩阶段:只能释放锁,不能申请锁。
  3. 封锁协议:如三级封锁协议,通过不同级别的锁解决数据一致性问题。

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 为例:

  1. 扩展阶段
    • T1 对 A 加共享锁(S),读取 A=2,对 B 加排他锁(X),写入 B=3。
    • T2 对 B 加排他锁(X),写入 B=6。
    • T3 对 B 加共享锁(S),读取 B=6,对 A 加排他锁(X),写入 A=7。
  2. 收缩阶段
    • T1 释放 A 和 B 的锁。
    • T2 释放 B 的锁。
    • T3 释放 B 和 A 的锁。

调度顺序:T1(加锁→操作→释放锁)→ T2(加锁→操作→释放锁)→ T3(加锁→操作→释放锁)。


7. 死锁及预防方法

死锁:多个事务因互相等待对方释放锁而无法继续执行。
预防方法

  1. 超时机制:事务等待锁超时后自动回滚。
  2. 死锁检测与恢复:定期检测死锁,强制回滚部分事务。
  3. 有序资源分配:按固定顺序申请锁,避免循环等待。

8. 三级封锁协议

  1. 一级封锁协议
    • 事务修改数据前必须加排他锁(X),直到事务结束。
    • 保证:防止丢失修改。
  2. 二级封锁协议
    • 在一级基础上,读取数据前加共享锁(S),读完立即释放。
    • 保证:防止丢失修改和脏读。
  3. 三级封锁协议
    • 在二级基础上,共享锁(S)保持到事务结束。
    • 保证:防止丢失修改、脏读和不可重复读。

主要区别:锁的释放时机和范围不同,解决的问题逐步增加。


9. 可串行化调度及判断方法

可串行化调度:并发执行的事务结果等价于某个串行执行的结果。
判断方法

  • 冲突可串行化:若调度的冲突操作顺序与某个串行调度一致,则为冲突可串行化。
  • 视图可串行化:更宽松的条件,允许非冲突操作交换顺序。

10. 两段锁的含义

两段锁协议要求事务分为两个阶段:

  1. 扩展阶段:只能申请锁,不能释放锁。
  2. 收缩阶段:只能释放锁,不能申请锁。
    作用:确保调度的可串行化,避免锁的交叉申请导致死锁或数据不一致。

以上答案结合了文件内容和数据库基础理论,确保准确性和逻辑性。

posted @ 2025-05-23 17:19  f-52Hertz  阅读(29)  评论(0)    收藏  举报