MySQL面试题 事务的隔离级别

MySQL的事务隔离级别有哪些?

MySQL的事务隔离级别有四种,从低到高分别是:读未提交、读已提交、可重复读、串行化。

  1. 读未提交:你可以读取到别人修改但未提交的数据,相当于毫无隔离可言。会出现脏读、不可重复读、幻读
  2. 读已提交:读别人已经提交的数据,但是同一事务中,读同一数据可能出现不一致,会出现不可重复读、幻读
  3. 可重复读:不管别的事务怎么修改,同一事务内读的都是第一次的快照。会出现幻读。
  4. 串行化:相当于事务一个一个排队执行,等于把并发关了。

MySQL默认为什么用可重复读?

  • 读已提交在同一事务中,读同一数据可能出现不一致
  • 在主从复制的过程中,用读已提交可能会造成同一条SQL在主库和从库结果可能对不上。
  • 可重复读可以保证同一事务内数据一致,配合bin log主从复制更稳定。

数据库的脏读、不可重复读、幻读分别是什么?

  • 脏读:读到其他事务尚未提交的数据
  • 不可重复读:同一事务中读到的两次数据不一致,被其他事务给修改了
  • 幻读:同一事务中执行的两次范围查询返回的结果不一样。中间有其他事务插入或删除了符合条件的数据。

InnoDB怎么解决这些问题?

  • 脏读:mvcc天然解决,读的是快照,未提交的版本不可见
  • 不可重复读:在可重复读的隔离级别下,ReadView在事务开始时就固定了,之后的每次访问都是同一个ReadView。
  • 幻读:当前读通过间隙锁和临键锁,锁住区间,别的事务不能插入,快照读走MVCC其他版本不可见
相关推荐
IvorySQL34 分钟前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king3 小时前
入门 java 和 数据库
java·数据库·后端
jiayou647 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
随风飘的云8 小时前
mysql的innodb引擎对可重复读做了那些优化,可以避免幻读
mysql
NineData19 小时前
NineData 迁移评估功能正式上线
数据库·dba
NineData1 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师1 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石1 天前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_2 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou643 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库