MySQL面试题 事务的隔离级别

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

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

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

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

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

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

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

InnoDB怎么解决这些问题?

  • 脏读:mvcc天然解决,读的是快照,未提交的版本不可见
  • 不可重复读:在可重复读的隔离级别下,ReadView在事务开始时就固定了,之后的每次访问都是同一个ReadView。
  • 幻读:当前读通过间隙锁和临键锁,锁住区间,别的事务不能插入,快照读走MVCC其他版本不可见
相关推荐
麦聪聊数据2 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
ApacheSeaTunnel2 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
shushangyun_2 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡2 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧3 小时前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon3 小时前
SQL学习指南——视图
数据库·sql
活宝小娜3 小时前
mysql详细安装教程
数据库·mysql·adb
贤时间3 小时前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心3 小时前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle