数据库事务隔离级别。
未标记
考查重点:读取可见性与并发异常。读未提交可脏读,读已提交按语句读已提交版本,可重复读稳定快照,可串行化提供更强隔离;实现异常需看产品
本题目录
参考答案
核心回答
事务隔离级别规定:并发事务的修改能在什么时候被其他事务看见,以及哪些并发异常不允许发生。 SQL 标准定义了四级:
- 读未提交(
Read Uncommitted):允许看到其他事务尚未提交的修改,可能出现脏读、不可重复读和幻读。 - 读已提交(
Read Committed,RC):不允许脏读,但同一事务前后两次读取之间,可能看到其他事务新提交的修改,仍允许不可重复读和幻读。 - 可重复读(
Repeatable Read,RR):不允许脏读和不可重复读;按标准的最低保证,仍允许幻读。数据库实现可以提供比标准更强的保证。 - 可串行化(
Serializable):并发事务的执行效果等价于按某种顺序逐个执行,防止上述异常及其他不可串行化的结果;实现通常需要更多冲突控制。
以 MySQL 8.4 InnoDB 为例,文档默认级别是 RR。RC 和 RR 的普通一致性读主要借助 MVCC:RC 每次读取建立新快照,RR 在同一事务中复用快照;锁定读和更新则使用当前记录及锁机制,不能把它们当成一直读取旧快照。
三种常见异常分别是什么?
脏读是读到了其他事务未提交的数据。例如 A 改了余额但还没提交,B 就读到新余额;如果 A 回滚,B 使用过的值从未成为有效的已提交结果。
不可重复读是同一事务重新读取原来读过的数据时,发现它被其他已提交事务修改。比如 B 先读余额 100,A 改成 80 并提交,B 再读变成 80。
幻读关注相同查询条件下的行集合。例如 B 两次查询“待处理订单”,期间 A 插入一条符合条件的订单并提交,B 第二次看到新的成员。关键是集合变化,不仅是行数增加,也不等于一条记录的某个字段变了。
标准中“允许某种异常”表示该级别没有承诺阻止它,不表示每次执行都会发生;也不能直接据此断言所有数据库的同名级别具有完全一样的行为。
InnoDB 的 RC 和 RR 怎样工作?
MVCC 通过记录版本、undo 历史和 Read View 判断哪些版本对当前读取可见,让普通查询可以读取合适的已提交版本,而不必总是等待并发写入结束。
RC:每次一致性读获取新的快照。两个查询之间有其他事务提交,后一次可能看见它的修改。RR:通常在第一次一致性读时建立快照,后续一致性读复用。普通BEGIN并不意味着快照已经固定在执行BEGIN的时刻;也可以显式要求开始时建立一致性快照。
假设余额最初是 100,B 第一次普通查询后,A 将它改成 80 并提交;B 在同一事务中再次进行普通一致性读,RC 可以看到 80,RR 仍按原快照看到 100。这个例子讨论的是普通一致性读,且 B 没有自己修改这条记录。
RR 已经彻底解决所有并发问题了吗?
需要区分读取方式。RR 下,重复的普通一致性读不会因为其他事务后来插入数据,就在原快照里突然看到新行;它没有阻止其他事务插入,只是按快照控制可见性。
SELECT ... FOR UPDATE、FOR SHARE 等锁定读,以及更新、删除操作,会面向当前记录处理并发冲突。RR 中,对范围的锁定访问通常使用间隙锁或 next-key lock,阻止其他事务向受保护间隙插入;已有记录上的唯一索引等值查找可以只锁记录,不能说所有查询都会锁整个范围。RC 通常减少间隙锁,但写入仍会加锁,外键和唯一性检查等也有例外。
因此,先快照读、再锁定读,两次结果可能不同:它们本来就在使用不同的读取语义。事务自己的修改也可影响后续可见结果,不能把 RR 理解为“所有语句永远看到完全冻结的数据”。需要先查询再修改的业务,应明确锁定范围或使用条件更新、版本校验,并由数据库约束保护关键规则。
RR 也不等价于可串行化。例如两个事务分别读取同一组值,再根据旧状态修改不同记录,仍可能共同破坏跨记录约束。只核对脏读、不可重复读和幻读三项,不能证明所有业务执行结果都可串行化。
常见追问
可串行化是不是整库一次只运行一个事务? 不是。它要求结果等价于某个串行顺序,不要求物理上完全串行。InnoDB 在非自动提交的事务中,会将普通查询隐式转为共享锁定读以加强冲突控制;仍可能发生等待或死锁,应用需要处理失败和重试。
隔离级别是不是越高越好? 应看业务需要哪些保证、查询与更新方式、冲突范围和并发成本。RC 的读取更新鲜,却可能前后不一致;RR 提供稳定快照,范围锁也可能增加等待。默认级别和会话配置还可能被部署修改,应以实际配置和并发行为为准。
参考资料
- 国内:JavaGuide:MySQL 事务隔离级别详解:参考四级隔离与并发异常的对照,组织正文对标准最低保证的说明,并区分 InnoDB 的快照读和当前读。
- 国内:小林 coding:事务隔离级别是怎么实现的?:Read View 和版本链部分说明 RC、RR 为什么有不同的可见性,以及旧版本怎样支持一致性读。
- 国内:小林 coding:MySQL 可重复读隔离级别,完全解决幻读了吗?:借鉴普通查询、锁定读取和事务自身更新的例子,解释正文中稳定快照不等于所有语句永远返回相同结果。
- 国外:MySQL 8.4:Transaction Isolation Levels:InnoDB 四级实现、首次快照、范围锁与唯一查找、RC 锁行为和 Serializable 条件,说明实际机制的适用边界。
- 国外:PostgreSQL 18:Transaction Isolation:开头对 SQL 标准异常及隔离级别的定义,说明标准是最低保证,以及可重复读与可串行化为什么仍有差别。
相关面经
66 篇公司未注明
后端开发你刚刚提到了mysql,说一下mysql事务隔离级别
得物
Java 开发华鲲振宇
AI 开发innodb的四个隔离级别了解吗?
启云方
AI 应用开发工程师MySQL 事务隔离级别有哪些?默认是什么?分别解决什么问题?
水滴公司
AI 全栈工程师MySQL 默认隔离级别是什么?
展开剩余 61 篇面经
字节跳动
后端开发工程师事务有哪些隔离级别?分别是什么意思?MySQL 默认的隔离级别是什么?
汽车之家
**9. MySQL 有哪些事务隔离级别?默认是什么?**
网易云音乐
全栈开发 / 后端开发实习四种隔离级别?默认是哪个?
字节跳动
全栈开发工程师字节跳动
AI 应用工程师数据库索引、事务了解吗?
字节跳动
后端开发MySQL 有哪些事务隔离级别?可重复读有什么问题?
得物
Java 开发工程师MySQL事务隔离级别、对应会出现的问题?
汇川技术
全栈开发工程师MySQL的事务隔离级别有哪些,默认的隔离级别是什么
顺丰
后端开发工程师事务隔离机制
蚂蚁集团
招银云创
Java 后端开发还记不记得数据库里面那些隔离级别?比如说读未提交这些,大概讲讲,都有哪几个级别?
字节跳动
AI Agent 研发工程师MySQL 有哪四种事务隔离级别?
腾讯
全栈开发实习生两个事务同时处理同一个学生的数据时会发生什么?实际业务中会出现这种情况吗?
高途
后端开发MySQL:为什么使用 B+ 树、B 树和 B+ 树区别、聚簇索引和二级索引、覆盖索引、ACID、事务隔离级别、MVCC 实现
快手
后端开发事务隔离级别
美团
MySQL 常用的事务隔离级别有哪些?默认是哪一个?
超参数
后端开发MySQL InnoDB 的默认隔离级别是多少?
哔哩哔哩、百度、腾讯
快手
什么情况下发生脏读?事务隔离级别?
快手
后端开发工程师小米
后端 Java小红书
AI后端开发MySQL四种事务隔离级别分别是什么,使用场景
阿里巴巴
后端开发小红书
后端开发工程师事务隔离级别
华为
通用软件开发3\. MySQL 如何通过事务、隔离级别和锁解决并发修改问题?
公司未注明
软件开发MySQL事务的4种隔离级别
小红书
AI 后端开发事务隔离级别
Snapmaker
Web 全栈开发工程师mysql事务隔离级别
公司未注明
AI 应用开发四大隔离级别、MVCC实现原理
百度
后端开发10 事务怎么开启 特性 隔离级别
字节跳动
后端开发实习生百度
Agent 开发工程师数据库事务隔离
火齐境
事务隔离级别及区别
公司未注明
Java 后端说一下事务的隔离级别
网易
程序开发数据库如何保证高并发安全性
字节跳动
后端开发工程师(AI)隔离级别你了解吗?
公司未注明
Vibe Coding事务的隔离级别有哪些?分别解决了什么问题?
腾讯
后端开发工程师(AI)数据库 4 个隔离级别及其实现?
蚂蚁集团
agent后端开发事务隔离级别
美团
软件开发工程师(后端方向)数据库的事务隔离级别有哪些?
美团
技术岗位请你详细说明关系型数据库中的事务隔离级别有哪些,以及它们分别是如何实现的?
摩根士丹利
研发岗学徒什么是数据库事务隔离机制
腾讯
AI 应用开发实习生MySQL 事务隔离级别有哪些?
重庆开源共创科技
事务的有哪几种隔离级别?
用友金融
Java 后端开发实习生MySQL的默认隔离级别?如何解决幻读?
小红书
AI Agent事务隔离的级别
腾讯
AI 后台开发MySQL事务隔离级别 锁粒度。
快手
后端开发c. MySQL 的隔离级别有哪几种?区别是什么?
腾讯
Java 后端开发怎么避免脏读呢
京东
AI 后端开发数据库隔离级别,Mysql可重复读如何实现
公司未注明
Go 后端开发事务隔离级别及可能造成的问题
字节跳动、腾讯
MySQL事务的隔离级别有哪几种?
阿里巴巴
AI 工程数据库事务隔离级别,脏读不可重复读幻读怎么解决
美团
后端开发MySQL 的隔离级别有哪几种?区别是什么?
腾讯
后端开发MySQL有几种隔离级别?分别是什么?怎么解决并发问题?
字节跳动
后端开发百度
后端开发数据库的隔离性怎么保证(锁,mvcc,隔离级别)
极豆科技
AI-Agent事务隔离级别你了解吗?
字节跳动
AI 开发MySQL中的事务隔离级别有哪些?
快手
AI Agent 开发MySQL事物隔离一致性讲一下
百度
Go 后端开发MySQL索引失效场景及事务隔离级别?













