MySQL面试题 事务的隔离级别

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

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

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

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

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

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

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

InnoDB怎么解决这些问题?

  • 脏读:mvcc天然解决,读的是快照,未提交的版本不可见
  • 不可重复读:在可重复读的隔离级别下,ReadView在事务开始时就固定了,之后的每次访问都是同一个ReadView。
  • 幻读:当前读通过间隙锁和临键锁,锁住区间,别的事务不能插入,快照读走MVCC其他版本不可见
相关推荐
若兰幽竹5 分钟前
【从零开始编写数据库系统:架构设计与实现】第5章:查询执行引擎与火山模型
数据库·架构·数据库内核·toydb
天空属于哈夫克339 分钟前
企业微信API常见的错误和解决方案
java·数据库·企业微信
东风破1371 小时前
DM8达梦数据库备份、恢复原理介绍
数据库·oracle·dm达梦数据库
鹏子训1 小时前
AI记忆新思路:用SQLite替代向量数据库,去EMBEDDINGS化,谷歌开源Google Always On Memory Agent
数据库·人工智能·sqlite·embedding
Frank_refuel1 小时前
终端环境下:Ubuntu 22.04.1 安装 MySQL 数据库
数据库·mysql·ubuntu
虹科网络安全2 小时前
艾体宝产品|深度解读 Redis 8.4 新增功能:原子化 Slot 迁移(下)
数据库·redis·bootstrap
有味道的男人3 小时前
对接亚马逊平台接口,商品全量信息一键抓取
数据库
Web极客码4 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库
逻辑驱动的ken5 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
qq_392690665 小时前
Redis怎样应对Redis集群整体宕机带来的雪崩
jvm·数据库·python