网站首页 > 技术文章 正文
MySQL事务隔离级别主要是四种:读未提交、读已提交、可重复读、串行化,下面重点详解MyQL事务隔离级别@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
MySQL事务隔离级别
1.read uncommitted(读未提交)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。
读未提交会产生的问题:脏读、不可重复读、幻读,下面我会单独来详解什么是脏读、不可重复读、幻读。
读未提交这种隔离级别,很少应用到实际场景,因为会产生脏读等致命问题。
2. read committed(读已提交)
为了避免脏读,数据库有了比读未提交更高的隔离级别,即已提交读。
一个事务提交之后,它做的变更才会被其他事务看到,只能读取到已经提交的数据,这就是读已提交。
这是大多数数据库系统的默认隔离级别,但不是MySQL默认的,是Oracle的默认级别。
【会产生的问题】:不可重复读、幻读。
3.repeatable read(可重复读)
可重复读:确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新(update)。
也就是说:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。
可重复读是MySQL InnoDB默认级别,在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读。
【会产生的问题】:幻读。
4. serializable(串行化)
串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。
串行化:一般不会使用,它会给每一 行读取的数据加锁,造成大量的等待和锁冲突。
【会产生的问题】:可以解决所有问题。
事务隔离级别引发问题
MySQL事务隔离级别会出现脏读、不可重复读、幻读等问题,所以下面接着详解这些问题。
1.脏读
脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。
一个事务读取到另一个事务未提交的更新数据,这就是脏读。
如下图所示:
2.不可重复读
在同一个事务中,多次读取同一数据返回的结果不同,如下图所示:
不可重复读和脏读不同的是:这里读取的是已经提交过后的数据。
3.幻读
幻读是针对数据插入(INSERT)操作来说的,就是:一个事务读到另一个事务已提交的 insert 数据。
如下图所示:
比如:统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
MySQL事务隔离级别总结
事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)是是是
不可重复读(read-committed)否是是
可重复读(repeatable-read)否否是
串行化(serializable)否否否
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2025-09-02 EMNLP 2025 | 动态压缩CoT推理新方法LightThinker来了
- 2024-11-08 oracle中where 子句和having子句中的区别介绍
- 2024-11-08 阿里二面:为什么MySQL选择Repeatable Read作为默认隔离级别?
- 2024-11-08 Oracle 数据库与 SQL 数据库的区别,以及编程语言语法区别
你 发表评论:
欢迎- 09-0613.通过Excel导出数据库中的维值_数据库exp导入导出数据
- 09-06做数据分析时,SQL需要达到以下水平
- 09-06Java开发指南:JDK21下载、安装及目录解析,轻松开启编程之旅
- 09-06hive存储过程_hive存储过程环境变量
- 09-06Maven常用命令_maven常用命令有哪些
- 09-06JDK从8升级到21的问题集_jdk更新到几了
- 09-06Oracle狂刷存在感 NRF展会惊艳四座
- 09-06哪些软件支持UDI标签的生成与验证
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)