返回
MySQL 事务与锁
百科(权威知识源 · 考试范围)
MySQL 事务与锁机制
事务保证一组操作要么全部成功,要么全部失败,是数据库可靠性的核心。
事务的 ACID
- 原子性(Atomicity):事务中的操作要么都做、要么都不做;失败可回滚。
- 一致性(Consistency):事务执行前后数据保持一致。
- 隔离性(Isolation):并发事务互不干扰。
- 持久性(Durability):事务提交后数据长期保存(Redo Log 保证)。
隔离级别
由低到高四个隔离级别:
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | 可能 | 可能 | 可能 |
| 读已提交(RC) | 无 | 可能 | 可能 |
| 可重复读(RR) | 无 | 无 | InnoDB 防 |
| 串行化 | 无 | 无 | 无 |
- 脏读:读到另一事务未提交的数据。
- 不可重复读:同一事务内两次读同一数据结果不同(其他事务修改并提交)。
- 幻读:同一事务内两次查询结果行数不同(其他事务插入/删除)。
MySQL InnoDB 默认隔离级别是可重复读(RR),通过 MVCC + 间隙锁防止幻读。
MVCC(多版本并发控制)
MVCC 通过 Undo Log 版本链 + ReadView 实现:读写不阻塞,提供快照读。每个事务看到的数据版本由事务 id 与 ReadView 决定。
锁机制
乐观锁 vs 悲观锁:
- 乐观锁:用版本号 / CAS 更新,提交时校验冲突。
- 悲观锁:用数据库锁(select .. for update)。
按粒度:
- 表锁:锁整表,并发差。
- 行锁:记录锁、间隙锁、next-key 锁。InnoDB 行锁基于索引,若条件无索引会退化为表锁。
死锁
死锁指两个事务互相持有对方需要的资源,导致互相等待。InnoDB 会自动检测死锁,并回滚代价较小的事务。
防止死锁:按固定顺序访问资源、缩短事务长度、避免大事务、减少不必要的锁。
总结
- ACID + 隔离级别 + MVCC + 锁,共同保证事务正确与并发性能。
- InnoDB 默认 RR,用 MVCC 与间隙锁防幻读。
- 行锁基于索引;合理设计事务与索引可减少锁冲突与死锁。
考试信息
通过标准满分(错一道即与满分无缘,可把整卷答完看解析;重考不限次数)
时间限制不限时
单卷抽题数10 题
成绩窗口2026-09-14 ~ 2026-09-20
积分学费20 积分
支付方式满分后用积分支付(自主决定)
用积分支付:成绩长期保留,参与排名,积分学费含平台资助池;不支付:成绩保留至窗口截止后清空
积分无充值通道;积分不足 10 时,平台自动发放 100 积分。积分不可提现、不可转让、无现金价值。
排行榜(窗口期最短满分用时 · 前 0 名)
当前窗口(2026-09-14 ~ 2026-09-20)
该窗口暂无满分记录
课程(免费学习 · 共 0 门)
暂无课程
登录后可查看我的出题、测试记录并参加满分考试