数据库事务隔离级别。

考查重点:读取可见性与并发异常。读未提交可脏读,读已提交按语句读已提交版本,可重复读稳定快照,可串行化提供更强隔离;实现异常需看产品

本题目录

参考答案

核心回答

事务隔离级别规定:并发事务的修改能在什么时候被其他事务看见,以及哪些并发异常不允许发生。 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 提供稳定快照,范围锁也可能增加等待。默认级别和会话配置还可能被部署修改,应以实际配置和并发行为为准。

参考资料

相关面经

66 篇

公司未注明

后端开发
查看原面经 →
你刚刚提到了mysql,说一下mysql事务隔离级别

得物

Java 开发
一面
查看原面经 →
MySQL 四种事务隔离级别是什么,各有什么问题?
InnoDB 默认隔离级别是什么,如何尽量避免幻读?

华鲲振宇

AI 开发
秋招一面
查看原面经 →
innodb的四个隔离级别了解吗?

启云方

AI 应用开发工程师
一面
查看原面经 →
MySQL 事务隔离级别有哪些?默认是什么?分别解决什么问题?

水滴公司

AI 全栈工程师
校招秋招一面、二面
查看原面经 →
MySQL 默认隔离级别是什么?
展开剩余 61 篇面经

字节跳动

后端开发工程师
一面
查看原面经 →
事务有哪些隔离级别?分别是什么意思?MySQL 默认的隔离级别是什么?

汽车之家

面经合集
查看原面经 →
**9. MySQL 有哪些事务隔离级别?默认是什么?**

网易云音乐

全栈开发 / 后端开发实习
实习秋招一面
查看原面经 →
四种隔离级别?默认是哪个?

字节跳动

全栈开发工程师
二面
查看原面经 →
能讲一下 MySQL 的事务隔离吗?
事务隔离有哪些级别?

字节跳动

AI 应用工程师
一面
查看原面经 →
数据库索引、事务了解吗?

字节跳动

后端开发
一面
查看原面经 →
MySQL 有哪些事务隔离级别?可重复读有什么问题?

得物

Java 开发工程师
一面
查看原面经 →
MySQL事务隔离级别、对应会出现的问题?

汇川技术

全栈开发工程师
查看原面经 →
MySQL的事务隔离级别有哪些,默认的隔离级别是什么

顺丰

后端开发工程师
一面
查看原面经 →
事务隔离机制

蚂蚁集团

面经合集
查看原面经 →
数据库的隔离级别
事务的隔离级别

招银云创

Java 后端开发
二面
查看原面经 →
还记不记得数据库里面那些隔离级别?比如说读未提交这些,大概讲讲,都有哪几个级别?

字节跳动

AI Agent 研发工程师
校招秋招
查看原面经 →
MySQL 有哪四种事务隔离级别?

腾讯

全栈开发实习生
日常实习一面
查看原面经 →
两个事务同时处理同一个学生的数据时会发生什么?实际业务中会出现这种情况吗?

高途

后端开发
校招秋招一面
查看原面经 →
MySQL:为什么使用 B+ 树、B 树和 B+ 树区别、聚簇索引和二级索引、覆盖索引、ACID、事务隔离级别、MVCC 实现

快手

后端开发
秋招二面
查看原面经 →
事务隔离级别

美团

面经合集实习
查看原面经 →
MySQL 常用的事务隔离级别有哪些?默认是哪一个?

超参数

后端开发
二面
查看原面经 →
MySQL InnoDB 的默认隔离级别是多少?

哔哩哔哩、百度、腾讯

面经合集实习
查看原面经 →
数据库四种隔离级别是什么?
脏读、不可重复读、幻读分别是什么?
各隔离级别分别会出现哪些问题、能解决到什么程度?

快手

面经合集实习
查看原面经 →
什么情况下发生脏读?事务隔离级别?

快手

后端开发工程师
一面
查看原面经 →
MySQL 有几个事务隔离级别?
追问
每个事务隔离级别分别是什么?
追问
不同隔离级别解决了什么问题?

小米

后端 Java
秋招一面
查看原面经 →
MySQL 有哪些事务隔离级别?
不同事务隔离级别分别能够解决哪些并发问题?

小红书

AI后端开发
实习一面
查看原面经 →
追问
MySQL四种事务隔离级别分别是什么,使用场景

阿里巴巴

后端开发
实习一面
查看原面经 →
MySQL 有哪些事务隔离级别?默认级别是什么?
可重复读与读已提交有什么区别?Read View 何时生成?

小红书

后端开发工程师
实习一面
查看原面经 →
事务隔离级别

华为

通用软件开发
一面、二面
查看原面经 →
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有几种隔离级别?分别是什么?怎么解决并发问题?

字节跳动

后端开发
暑期实习一面
查看原面经 →
MySQL 的事务隔离级别有哪些?分别说明,InnoDB 默认是哪一种?MVcc怎么做的
追问
幻读是什么样的场景?

百度

后端开发
暑期实习一面、二面、三面
查看原面经 →
数据库的隔离性怎么保证(锁,mvcc,隔离级别)

极豆科技

AI-Agent
一面
查看原面经 →
事务隔离级别你了解吗?

字节跳动

AI 开发
一面
查看原面经 →
MySQL中的事务隔离级别有哪些?

快手

AI Agent 开发
实习一面、二面
查看原面经 →
MySQL事物隔离一致性讲一下

百度

Go 后端开发
实习一面
查看原面经 →
MySQL索引失效场景及事务隔离级别?

收录题集

2 个来源,共2 份题集

相关题目

4 题