# 计算机考研复试--事务与并发控制核心知识点 --- ## 一、事务基础概念 ### 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)**:定期保存数据库状态,加速恢复过程。 --- ## 五、高频考点速记 1. **两段锁协议**:加锁阶段 → 解锁阶段,保证可串行化调度。 2. **视图机制**:通过虚表隐藏敏感字段,实现逻辑独立性和安全性。 3. **触发器作用**:事件驱动自动执行(如插入后更新统计表)。 4. **可串行化调度**:等价于某个串行执行结果,通过两段锁协议实现。 --- > 参考资料:王珊《数据库系统概论》核心考点 + 近5年复试真题分析 > 注:建议结合SQL编程题(如死锁模拟)和封锁协议案例分析强化理解。