文章

DBMS笔记 09 并发控制

并发控制通过事务的 ACID 特性和封锁机制,解决丢失修改、读脏数据和不可重复读等问题,保证多事务并发执行时的数据一致性。 其核心方法包括三级封锁协议和两阶段锁协议(2PL),在实现可串行化调度的同时,需要处理可能出现的死锁问题。

DBMS笔记 09 并发控制

第九章 并发控制

一、事务的基本概念

  • 事务:数据库的基本执行单位,一组操作的集合。
  • SQL语句:BEGIN TRANSACTION; COMMIT; ROLLBACK;
  • ACID 特性
    1. 原子性(Atomicity):事务要么全做要么全不做。
    2. 一致性(Consistency):事务执行后数据库从一种一致状态到另一种一致状态。
    3. 隔离性(Isolation):并发执行时事务之间互不干扰。
    4. 持久性(Durability):事务一旦提交,其结果是永久的。

二、并发带来的问题

  1. 丢失修改:T1 和 T2 同时修改数据,后提交的覆盖前提交的,导致修改丢失。
  2. 不可重复读:T1 在不同时间读同一数据,结果不同(因 T2 修改并提交)。
  3. 读“脏”数据:T1 读取了 T2 未提交的数据,若 T2 回滚,T1 读到无效值。

三、封锁 (Locking)

  • 排他锁 (X锁):加锁对象只能写,不能被其他事务读写。
  • 共享锁 (S锁):加锁对象只能读,不能被写。

封锁协议

  1. 一级封锁协议
    • 事务修改数据时必须加 X 锁,直到事务结束才释放。
    • 可防止 丢失修改
  2. 二级封锁协议
    • 在一级基础上,读数据时必须加 S 锁,读完立即释放。
    • 可防止 丢失修改 + 读脏数据
  3. 三级封锁协议
    • 在二级基础上,读数据时加 S 锁,直到事务结束才释放。
    • 可防止 丢失修改 + 读脏数据 + 不可重复读

四、死锁与处理

  • 死锁:两个事务循环等待对方锁定的数据资源。
  • 解决方法
    1. 预防(一次性封锁法、顺序封锁法)。
    2. 检测(定期检测是否死锁,若是则回滚事务)。
    3. 解除(选择回滚某个事务)。

五、并发调度与可串行化

  • 调度:多个事务并发执行的顺序。
  • 可串行化调度:并发调度等价于某个串行调度,保证一致性。
  • 两阶段锁协议 (2PL)
    • 加锁阶段:事务可申请锁但不能释放。
    • 解锁阶段:事务释放锁但不能再申请。
    • 保证调度 可串行化,但不保证无死锁。

六、重点

  1. 事务特性不含 可靠性,而是 持久性
  2. S锁与X锁关系:S锁可并存,X锁排他。
  3. 三级封锁协议可解决所有三类问题(丢失修改/读脏/不可重复读)。
  4. 死锁避免方法:一次性封锁、顺序封锁。
  5. 事务调度可串行化:满足冲突可串行化条件。
  6. 两阶段锁协议 (2PL):保证可串行化,但仍可能死锁。
  7. ACID 考点:常混淆 一致性 vs 隔离性

七、速记

  • 事务四特性:原子性、一致性、隔离性、持久性(ACID)。
  • 三大问题:丢失修改、读脏数据、不可重复读。
  • 锁协议:一级防丢失、二级加防脏读、三级再防不可重复读。
  • 死锁:避免/检测/解除。
  • 两阶段锁 (2PL):保证可串行化,但可能死锁。
本文由作者按照 CC BY-NC 4.0. 进行授权
...

Comments

评论区

碎片之中

正在加载中...