计算机考研复试--事务与并发控制核心知识点
一、事务基础概念
1. 事务定义与ACID特性
- 定义:事务是数据库操作的逻辑单元,包含一组不可分割的操作(如转账:扣款+存款)。
- ACID特性:
- 原子性(Atomicity):事务全成功或全失败,通过UNDO日志实现回滚。
- 一致性(Consistency):事务前后数据库状态合法(如账户总额不变)。
- 隔离性(Isolation):并发事务互不干扰,通过锁机制实现。
- 持久性(Durability):提交后数据永久存储,依赖REDO日志。
2. 事务生命周期
- BEGIN → 操作(INSERT/UPDATE等) → COMMIT(持久化)或 ROLLBACK(回滚)。
- 保存点(SAVEPOINT):允许回滚到事务中间状态(如转账中途失败仅撤销部分操作)。
二、并发控制问题与解决方案
1. 并发问题类型
| 问题 |
描述 |
示例 |
| 丢失修改 |
后提交覆盖前提交结果(如双人同时扣款) |
|
| 脏读 |
读取未提交的无效数据(如读转账失败前的余额) |
|
| 不可重复读 |
同一事务两次读取结果不同(如统计期间数据被修改) |
|
| 幻读 |
范围查询结果数量变化(如新增记录导致统计值变化) |
|
2. 封锁机制
- 锁类型:
- 共享锁(S锁):读锁,允许多事务读取。
- 排他锁(X锁):写锁,独占数据修改权。
- 封锁协议:
- 一级封锁协议:写锁到事务结束,防止丢失修改。
- 二级封锁协议:读锁立即释放,防止脏读。
- 三级封锁协议:读锁到事务结束,防止不可重复读。
三、隔离级别与锁优化
1. 隔离级别对比
| 隔离级别 |
脏读 |
不可重复读 |
幻读 |
实现方式 |
| 读未提交(READ UNCOMMITTED) |
✔️ |
✔️ |
✔️ |
无锁 |
| 读已提交(READ COMMITTED) |
✖️ |
✔️ |
✔️ |
短S锁(仅写时加锁) |
| 可重复读(REPEATABLE READ) |
✖️ |
✖️ |
✔️ |
长S锁 + 间隙锁(防幻读) |
| 串行化(SERIALIZABLE) |
✖️ |
✖️ |
✖️ |
严格加锁,完全串行 |
注:MySQL默认隔离级别为可重复读(REPEATABLE READ),通过间隙锁解决幻读。
2. 锁优化策略
- 意向锁(IS/IX):快速检测表级锁冲突(如加表锁前检查意向锁)。
- 行锁 vs 表锁:行锁(InnoDB)支持高并发,表锁(MyISAM)开销小。
- 死锁处理:
- 预防:一次封锁法(全加锁)或顺序加锁法。
- 检测与解除:等待图法检测回路,撤销代价最小事务。
四、数据库恢复技术
1. 故障类型与恢复策略
| 故障类型 |
恢复策略 |
关键实现 |
| 事务故障 |
UNDO日志回滚未提交操作 |
|
| 系统故障 |
UNDO未提交事务 + REDO已提交事务 |
|
| 介质故障 |
重装备份 + 日志恢复(如磁盘损坏) |
|
2. 日志与检查点
- 日志规则:先写日志后写库(WAL原则),保证故障可恢复。
- 检查点(Checkpoint):定期保存数据库状态,加速恢复过程。
五、高频考点速记
- 两段锁协议:加锁阶段 → 解锁阶段,保证可串行化调度。
- 视图机制:通过虚表隐藏敏感字段,实现逻辑独立性和安全性。
- 触发器作用:事件驱动自动执行(如插入后更新统计表)。
- 可串行化调度:等价于某个串行执行结果,通过两段锁协议实现。
参考资料:王珊《数据库系统概论》核心考点 + 近5年复试真题分析
注:建议结合SQL编程题(如死锁模拟)和封锁协议案例分析强化理解。