MySQL面试题 事务的隔离级别

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

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

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

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

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

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

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

InnoDB怎么解决这些问题?

  • 脏读:mvcc天然解决,读的是快照,未提交的版本不可见
  • 不可重复读:在可重复读的隔离级别下,ReadView在事务开始时就固定了,之后的每次访问都是同一个ReadView。
  • 幻读:当前读通过间隙锁和临键锁,锁住区间,别的事务不能插入,快照读走MVCC其他版本不可见
相关推荐
bksczm2 小时前
Redis 持久化:RDB 快照与 AOF 日志
数据库·redis·mybatis
.痞老板.3 小时前
mysql初阶--数据库设计
数据库·mysql·oracle
Decay__4 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
Thanks_ks4 小时前
SQL 的 GROUP BY 与聚合函数:从会写 SELECT 到会做统计
数据库·sql·mysql·group by·数据统计·聚合函数·having
Decay__12 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
笃行35013 小时前
AI数据库的库内四层结构,KingbaseES 产品拆解
数据库
我是大猴子15 小时前
redis
数据库·redis·缓存
苏宸啊17 小时前
MySQL(一)
数据库·mysql
2603_9696948517 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
这个DBA有点耶18 小时前
库内语义构建 vs 外挂向量库:业务语义缺失,才是RAG“胡说八道”的根源
数据库·mysql·aigc