DBMS笔记 09 并发控制
并发控制通过事务的 ACID 特性和封锁机制,解决丢失修改、读脏数据和不可重复读等问题,保证多事务并发执行时的数据一致性。 其核心方法包括三级封锁协议和两阶段锁协议(2PL),在实现可串行化调度的同时,需要处理可能出现的死锁问题。
DBMS笔记 09 并发控制
第九章 并发控制
一、事务的基本概念
- 事务:数据库的基本执行单位,一组操作的集合。
- SQL语句:
BEGIN TRANSACTION; COMMIT; ROLLBACK; - ACID 特性:
- 原子性(Atomicity):事务要么全做要么全不做。
- 一致性(Consistency):事务执行后数据库从一种一致状态到另一种一致状态。
- 隔离性(Isolation):并发执行时事务之间互不干扰。
- 持久性(Durability):事务一旦提交,其结果是永久的。
二、并发带来的问题
- 丢失修改:T1 和 T2 同时修改数据,后提交的覆盖前提交的,导致修改丢失。
- 不可重复读:T1 在不同时间读同一数据,结果不同(因 T2 修改并提交)。
- 读“脏”数据:T1 读取了 T2 未提交的数据,若 T2 回滚,T1 读到无效值。
三、封锁 (Locking)
- 排他锁 (X锁):加锁对象只能写,不能被其他事务读写。
- 共享锁 (S锁):加锁对象只能读,不能被写。
封锁协议
- 一级封锁协议:
- 事务修改数据时必须加 X 锁,直到事务结束才释放。
- 可防止 丢失修改。
- 二级封锁协议:
- 在一级基础上,读数据时必须加 S 锁,读完立即释放。
- 可防止 丢失修改 + 读脏数据。
- 三级封锁协议:
- 在二级基础上,读数据时加 S 锁,直到事务结束才释放。
- 可防止 丢失修改 + 读脏数据 + 不可重复读。
四、死锁与处理
- 死锁:两个事务循环等待对方锁定的数据资源。
- 解决方法:
- 预防(一次性封锁法、顺序封锁法)。
- 检测(定期检测是否死锁,若是则回滚事务)。
- 解除(选择回滚某个事务)。
五、并发调度与可串行化
- 调度:多个事务并发执行的顺序。
- 可串行化调度:并发调度等价于某个串行调度,保证一致性。
- 两阶段锁协议 (2PL):
- 加锁阶段:事务可申请锁但不能释放。
- 解锁阶段:事务释放锁但不能再申请。
- 保证调度 可串行化,但不保证无死锁。
六、重点
- 事务特性不含 可靠性,而是 持久性。
- S锁与X锁关系:S锁可并存,X锁排他。
- 三级封锁协议可解决所有三类问题(丢失修改/读脏/不可重复读)。
- 死锁避免方法:一次性封锁、顺序封锁。
- 事务调度可串行化:满足冲突可串行化条件。
- 两阶段锁协议 (2PL):保证可串行化,但仍可能死锁。
- ACID 考点:常混淆 一致性 vs 隔离性。
七、速记
- 事务四特性:原子性、一致性、隔离性、持久性(ACID)。
- 三大问题:丢失修改、读脏数据、不可重复读。
- 锁协议:一级防丢失、二级加防脏读、三级再防不可重复读。
- 死锁:避免/检测/解除。
- 两阶段锁 (2PL):保证可串行化,但可能死锁。
本文由作者按照 CC BY-NC 4.0. 进行授权
...

Comments
评论区