MySQL

·4 分钟阅读·1372 字
📋 目录

MySQL 事务与锁面试题


1. ACID 事务特性

【题目】

简述 MySQL 中的事务及其 ACID 特性?

【参考答案】

事务是数据库操作的基本单位,要么全部执行成功,要么全部不执行

特性含义🔧 实现机制
Atomicity(原子性)事务不可分割,全有或全无undo log 回滚
Consistency(一致性)数据完整性约束不被破坏应用层 + 数据库约束共同保证
Isolation(隔离性)并发事务互不干扰MVCC + 锁机制
Durability(持久性)提交后永久保存redo log + 磁盘写入

面试踩分点 不仅要能说出四个特性,还要说出各特性的底层实现机制(undo log、MVCC、redo log),这是区分”背概念”和”真理解”的关键。

【延伸追问】

  1. 四种隔离级别分别解决了哪些问题?
  2. MVCC 是如何实现 RC 和 RR 隔离级别的?

【易错坑点】

  • 原子性 ≠ 隔离性:原子性靠 undo log,隔离性靠 MVCC/锁
  • ❌ 持久性不是绝对的,取决于 innodb_flush_log_at_trx_commit 配置

2. 脏读、不可重复读、幻读

【题目】

什么是脏读、不可重复读、幻读?

【参考答案】

问题现象对比记忆
脏读(Dirty Read)读到其他事务未提交的数据,对方回滚后数据”不存在”📌 读到了”不存在”的数据
不可重复读(Non-repeatable Read)同一事务两次读取同一条记录,返回不同值📌 行数据变化
幻读(Phantom Read)同一事务两次范围查询,结果集行数不同📌 结果集行数变化

隔离级别对照:

隔离级别脏读不可重复读幻读
READ UNCOMMITTED❌ 未解决❌ 未解决❌ 未解决
READ COMMITTED✅ 解决❌ 未解决❌ 未解决
REPEATABLE READ(⚠️ MySQL 默认)✅ 解决✅ 解决✅ 解决(InnoDB Gap Lock)
SERIALIZABLE✅ 解决✅ 解决✅ 解决

MySQL RR 的特殊性 大多数数据库(如 Oracle)的 RR 不解决幻读,但 MySQL InnoDB 通过 Gap Lock(间隙锁)解决了 RR 下的幻读。这是面试高频加分点。

【延伸追问】

  1. MySQL InnoDB 的 RR 级别是如何解决幻读的?(MVCC + Gap Lock = Next-Key Lock)
  2. 什么是 Next-Key Lock?

【易错坑点】

  • 不可重复读 ≠ 幻读:前者是行数据变化,后者是行数变化
  • ❌ MySQL 的 RR 能解决幻读,但大多数数据库的 RR 不能,面试时注意区分

关联文档