4.数据库——事务与并发控制.md 4.5 KB

计算机考研复试--事务与并发控制核心知识点


一、事务基础概念

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编程题(如死锁模拟)和封锁协议案例分析强化理解。