2021.3.17

今天在阅读《高性能MySQL》的第一章时,遇到了四大隔离等级的概念,反复琢磨了许久,最后弄出了几张图来帮助记忆,希望对路过的博友们有帮助。

目录

  • 概念定义
  • 三大问题之一 —— 脏读图解
  • 三大问题之二 —— 不可重复读图解
  • 三大问题之三 —— 幻读图解
  • 隔离等级 —— 提交读图解
  • 隔离等级 —— 可重复读图解
  • 隔离等级 ——— 可串行化图解

概念定义

三大事务问题:

  • 脏读:事务可以读取另一个事务未提交的数据。

  • 不可重复读:在同一个事务中,执行相同的查询,查询出不一样的结果。

    • 常对应update语句
  • 脏读:事务A在读取某个范围的记录时,另一个事务B在这个范围插入了新的记录,当事务A再次读取该范围的记录时,出现了新的记录。(也叫幻行)

    • 常对应insert和delete语句

事务的四大隔离等级分别为:

  • READ UNCOMMITTED(未提交读)

    • 事务的修改,没有提交,在其他事务可见
    • 会出现脏读、不可重复读、幻读
  • READ COMMITTED(提交读)
    • 一个事务的数据从开始到提交之前,对于其他事务不可见。
    • 会出现不可重复度,幻读
  • REPEATABLE READ(可重复读)
    • 同一个事务中,多次读取同样的记录,结果是一致的。
    • 会出现幻读
  • SERIALIZABLE(可串行化)
    • 强制事务串行处理,上表级锁
    • 三个问题都不会出现
    • 效率很低,一般不用

三大问题之一 —— 脏读图解

在这里,事务1和事务2同时对员工信息表进行操作。
在脏读比较重要的点是
事务2并没有提交修改的情况下,事务1就已经读到了这个值

三大问题之二 —— 不可重复读图解

在这里,事务1和事务2同时对员工信息表进行操作。
在不可重复读的比较重要的点是
事务2在事务1还在执行的情况下完成提交,导致事务1前后读取的数据不一致
导致之前的数据丢失,所以叫不可重复读

三大问题之三 —— 幻读图解

在这里,事务1和事务2同时对员工信息表进行操作。
在幻读中比较重要的点是
在幻读中比较的是查询数据的项数,而不是项里面的数据
项数变多,导致看起来像产生了幻觉。

隔离等级 —— 提交读图解

因为未提交读三个问题都会出现,没什么需要讲解的。
因此这里直接讲解提交读。
在这里需要注意的
事务A在读取完数据之后,并没有提交事务, 事务A和事务B仍然在继续执行
也就是说事务A给小红那一行数据上锁只在读取的一瞬间
读取完之后立刻释放,锁的释放与否与事务是否提交并没有太大的关系。

隔离等级 —— 可重复读图解

个人认为可重复读是最难理解的一种隔离等级了。
从图中需要解释的是
事务A在进行其他操作的同时,事务B在对小红的信息进行修改。
照常理来思考,事务A最后应该读取出2000,后面的数据操作才是顺理成章的。
但是在这个隔离等级中,
事务A小红的工资,若非事务A自己修改,否则查询结果恒定不变
这个隔离等级在不同的DBMS有不同的实现,MySQL的InnoDB引擎中采用了一种“MVCC”方法,利用“快照读”,来实现可重复读这个隔离等级。
这个方法涉及另一块原理,这里不铺开描述。

隔离等级 ——— 可串行化图解


可串行化是最一劳永逸的办法了
操作非常简单,就是一旦一个事务进行操作的时候,就把整个表锁起来,其他事务完全没有办法操作。
但是这样做必定会导致效率低下,因此现实中基本不会采取这个做法。

多图理解MySQL事务的隔离等级,脏读,不可重复读,幻读的几大概念相关推荐

  1. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  2. mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...

    MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...

  3. java禁止数据库写入事务_Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等......

    1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction开启事务 •Rollback 回滚事务 •Commit 提 ...

  4. 从根儿上理解MySQL | 事务的隔离级别与MVCC

    目录 事务简介 事务的概念 MySQL中事务的语法 事务的隔离级别 事务并发执行遇到的问题 MySQL中支持的四种隔离级别 MVCC原理 版本链 ReadView MVCC小结 事务简介 事务的概念 ...

  5. MySQL事务隔离级别:可重复读、读已提交、读未提交。实操

    MySQL的事务隔离级别: 目录 一.可重复读(默认) REPEATABLE-READ: 二.读已提交  READ-COMMITTED: 一.可重复读(默认) REPEATABLE-READ: 准备实 ...

  6. 面试官:MySQL事务的隔离性是如何实现的?

    并发场景 最近做了一些分布式事务的项目,对事务的隔离性有了更深的认识,后续写文章聊分布式事务.今天就复盘一下单机事务的隔离性是如何实现的? 隔离的本质就是控制并发,如果SQL语句就是串行执行的.那么数 ...

  7. 同一事务中未提交的写能读到吗_03、MySQL事务的隔离性分析

    事务可以用来保证数据库的完整性:要么都做,要么不做.在 MySQL 中,事务支持是在引擎层实现的.你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务.比如 MySQL 原生的 ...

  8. 深入理解Mysql事务ACID特性以及事务隔离级别

    事务的概念: 1.事务是一组sql语句的执行,要么全部成功,要么全部失败.保证事务执行的原子性. 2.事务的全部sql语句执行成功,才能提交,将结果写回到磁盘上. 3.事务执行过程中,有的SQL执行失 ...

  9. 01. 数据库中事务的隔离等级及如何设置

    一 数据库事务四个特性 数据库的事务指的是一种机制,一系列的操作指令集合,是并发的系统上的最小控制单元 事务把一系列的的命令作为一个整体,一同向数据库进行提交或者回滚,一个事务内的命令要么全部成功,要 ...

最新文章

  1. Cling旨在提供一款高性能的C++ REPL
  2. js输出php文件大小,前端js实现文件的断点续传 后端PHP文件接收
  3. Java中重载(overload)和重写(override)
  4. 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
  5. 一个完整的Windows程序框架
  6. 20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串...
  7. java8新特性_JAVA8十大新特性详解
  8. word2003快速排版工具栏_技巧 | 快速又好看,PPT制作不再难
  9. 性能测试--siege
  10. 计算机组成原理中EMAR是什么,计算机组成原理复习资料+试题
  11. matlab中inv a,设A为矩阵,b为列向量,则Matlab中运算A\b 和运算inv(A)*b
  12. 微信小程序 上传图片失败
  13. 【剑指offer中等部分4】二进制中1的个数(java)
  14. VBA操作WORD(五)批量调整图片大小、居中设置
  15. 弗雷歇距离的原理及python代码实现(动态规划)
  16. Google Earth Engine(GEE)——利用sentinel-2数据进行农作物提取分析
  17. Python | 自动回复微信祝福语
  18. ChatGPT的各项超能力从哪儿来?万字拆解追溯技术路线图来了!
  19. 软件测试用户故事评审实验报告,手把手教你写用户故事验收标准
  20. 强迫症犯了,Python整理百度云盘文件大量重复无用文件

热门文章

  1. java实习第二周总结
  2. 报警c语言程序,单片机C语言程序设计:报警与旋转灯
  3. 论文一般分为哪几种结构
  4. PHP的301,302自动跳转代码
  5. gitHub客户端Desktop的安装使用总结 ---基础篇
  6. 解决bat批处理输出乱码的问题
  7. 【LSTM回归预测】基于matlab LSTM神经网络回归预测【含Matlab源码 2227期】
  8. 数据可视化原理_格式塔原理是数据可视化的实用方面
  9. android 导出Excel列表
  10. android通话记录手机号码归属地,mui 获取手机通话记录