首页 > 数据库 >MySQL的四个事务隔离级别有哪些?各自存在哪些问题?

MySQL的四个事务隔离级别有哪些?各自存在哪些问题?

时间:2024-03-15 16:58:59浏览次数:28  
标签:事务 读取 哪些 幻读 提交 MySQL 级别 隔离

前言

大家应该都知道mysql的事务有四个隔离级别,但是他们分别是什么隔离级别并且会带来什么问题呢?接下来我为大家一一揭晓,通过图解的方式方便大家理解。

一、读未提交(Read Uncommitted)

1、这个是隔离级别最低的。

2、顾名思义,可以看出来就是一个事务可以读取另外一个未提交事务的修改。

3、存在的问题也最多,包含脏读、不可重复读、幻读。

4、因为存在问题最多,也是使用最少的隔离级别。

从图上可以看出来,事务1第一次查询的结果为18,当事务2修改过后事务在未提交的情况下,事务1再次查询的结果变为20。

这个就是脏读,事务1读取到了事务2修改了但是还未提交的数据。

二、读已提交(Read Committed)

1、大多数的数据库的默认隔离级别,但是mysql的默认隔离级别不是这个。

2、顾名思义,可以看出来一个事务只能读取到已经提交事务的修改。

3、存在的问题,包含不可重复读、幻读。

4、因为它只能读取到已经提交事务的修改,所以解决了脏读的情况。

从图上可以看出来,事务1第一次读取的结果为18,当事务2修改完数据但是未提交事务的情况,事务1第二次读取的结果还是18,接着事务2提交事务,然后事务1第三次读取的结果变为20。

这个就是不可重复读,事务1在前后两次查询的数据结果不一致,前面两次的结果为18,第三次的结果变为20。

三、可重复读(Repeatable Read)

1、这个是mysql的默认隔离级别,对于InnoDB来说。

2、在同一个事务内,多次读取的结果都是一致的。

3、存在的问题,幻读。

4、这个级别解决了不可重复读的情况。

从图上可以看出来,虽然事务2完成了数据修改并且已经提交事务,但是在事务1的视角看前后两次读取的数据结果还是一致的都是18,这就解决了不可重复读的情况。

但是存在另外一个幻读的问题,事务1第一次读取id<10的时候数据有一条,接着事务2新插入了一条id=2的数据,然后事务1再次读取id<10的时候数据就有两条了。

四、串行化(Serializable)

1、这个是隔离级别的最高级。

2、通过对事务进行排序,使之串行执行,所以解决了上面说的脏读、不可重复读、幻读的情况。

3、但是因为是串行执行,事务只能一个接着一个执行,大大降低了并发性能,所以也是最影响性能的。

总结

本文主要介绍了MySQL的四个事务隔离级(读未提交、读已提交、可重复读、串行化),以及不同隔离级别存在的一些问题(脏读、不可重复读、幻读),还有可以通过什么隔离级别解决上述问题。

最后因本人能力有限可能有些地方讲的不对或讲错了,希望大家指出来好让我改进,还望大家多多包含,谢谢大家。

标签:事务,读取,哪些,幻读,提交,MySQL,级别,隔离
From: https://blog.csdn.net/zhangbin1988/article/details/136742272

相关文章

  • 连接MySQL报错,is not allowed to connect to this MySQL server
    问题描述:        本机装的MySQL数据库,本机可以正常连接,其他机器访问报错,isnotallowedtoconnecttothisMySQLserver,防火墙等其他策略均配置没问题。  解决方案:    出现该问题的原因是,MySQL数据库只允许自身所在的本机器连接,不允许远程连接。1、......
  • mysql备份脚本
    !/bin/bash备份路径db_backup_path="/data/backup"备份的数据库db_name=("live_net")用户名db_user="root"密码db_pass="[email protected]"gzip文件解压缩密码gz_des_pass="fff@20210326"压缩文件前缀prefix=“credit"日志路径log_path=&quo......
  • RHEL 9 / Rocky Linux 9 上安装 MySQL
    MySQL 是热门的开源关系数据库(RDBMS)由Oracle开发和维护。它提供SQL(结构化查询语言)语法,用于小型和大规模企业处理数据库。在这篇文章中,我们将解释如何在RHEL9或RockyLinux9上安装MySQL数据库服务器。我们将介绍MySQL8.0和最新版本的MySQL8.3.0的安装步骤。1.......
  • MySQL为什么使用B+树
    在线查看数据格式链接:DataStructureVisualizationhttps://www.cs.usfca.edu/~galles/visualization/Algorithms.html 常见数据结构:    1.数组:数组是内存中一块连续的内存空间,定义一个数组对象,就需要先指定数组的大小,当存储数据的大小大于定义的数组大小,就需......
  • MySQL 跨库之间联合查询的方法
    MySQL跨库之间联合查询的方法背景随着业务上云的需要,公司里面有阿里云上面的测试环境.也有公司内的测试环境.但是阿里云上面的机器和公司内的机器存在一些差异.所以一直想有一个归集数据的过程.能够在一张图标里面关联公司内和阿里云上面的一些数据信息实现类似于混......
  • 聊一聊 MySQL 的 InnoDB 存储引擎以及三种日志
    楔子上一篇文章我们介绍了MySQL的基本架构,这里再来回顾一下。整个架构还是很好理解的,我们说MySQL分为Server层和存储引擎层。其中Server层包含了MySQL的大多数核心服务功能,而存储引擎层则负责提供数据的存储和读取,并且是插件式的,一个Server层支持不同的存储引擎层......
  • MySQL默认值NULL、空值、Empty String的区别,哪个更好?
    一套完美的系统,离不开数据库的设计。当我们数据库添加一个新的字段的时候,你会设置默认值为NULL,空值、还是EmptyString呢?首先我们来看下这三种值的介绍空值,空白,即什么都不填,等同于NULL(设计表结构时保存空值会自动变成NULL),当然也可以手动输入默认值。NULL。EmptyString,空字......
  • STM32F105双路隔离型CAN总线转4G控制板 - 把CAN数据发送到TCP服务器,实现通过TCP透传
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/product/STM32F105_2CAN/index.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>......
  • php多进程引发mysql查询问题
    1、报错:Packetsoutoforder.Expected1received56.Packetsize=3159346开始配置my.cnf的max_allowed_packet=2G可是没什么卵用原因:个人判断是因在laravelmysql的连接是随着php销毁而销毁;所以会保持数据库的连接会话能重复使用所以要配置database.php  配置文件opt......
  • mysql:导入数据
    第一步:导入向导第二部第二步:选择数据格式点击下一步下一步:选择要导入哪一个下一步:点击开始点击完成即可,点击sheet1,就有了......