当前位置: 首页 > news >正文

MySQL事务隔离

什么是事务隔离?

为了确保在并发事务执行时,各个事务之间能够相互独立、互不干扰地运行,从而保证数据的一致性。

事务的隔离级别

MySQL事务隔离为了满足不同场景,提供了4个事务隔离级别(严格来讲是InnoDB存储引擎支持的),分别是:

  • 读未提交(Read Uncommitted)

  • 读已提交(Read Committed)

  • 可重复读(Repeatable Read)

  • 串行化(Serializable)

读未提交

事务在各自的周期内,可以读取到其他事务未提交的数据。

以下图为例,事务2的两次查询结果分别为18和19,即便事务1没有提交。

这种现象被称为“脏读”。 

读已提交

事务在各自的周期内,每次对同一个sql进行查询都是已经提交的数据。

以下图为例,事务2的两次查询结果分别为18和19,因为在此期间事务1对数据进行了更改。

 但是,这种现象被称为“不可重复读”,因为违反了事务的隔离性原则(在一个事务内,数据应该是一致的)

可重复读

每个事务在自己的事务周期内,多次对同一个sql进行查询都是相同的数据。

 以下图为例,事务2的两次查询结果都一样,即便在此期间事务1对数据进行了更改。

 但是,如果在“可重复读”级别下进行了当前读,那么还是会出现像”读已提交“中出现的“不可重复读”的现象,不过这里称之为”幻读“。

当前读就是读取行数据当前最新的状态,这个过程中会对所有读、写的数据加上相应的读锁、写锁、范围锁,目的是避免并发冲突。

串行化

可串行化,很好理解:并发事务的执行完全是串行,依次执行,不存在冲突导致的一致性问题。但是可想而知,这种隔离级别的并发效率肯定极为低下。

总结

MySQL提供了多种事务隔离级别,包括读未提交、读已提交、可重复读和串行化等。这些隔离级别在并发性能和数据一致性之间提供了不同的权衡,可以根据具体的应用场景和需求来选择适合的隔离级别。

http://www.lryc.cn/news/317967.html

相关文章:

  • Java基础知识总结(1)
  • 脚手架原理之webpack处理html文件和模块打包
  • Winform编程详解一:Form窗口
  • Windows Server 2025 Install Preview
  • 四、MySQL
  • C#使用泛型自定义的方法设计队列CQueue<T>类
  • IDEA自定义Maven仓库
  • Codeql复现CVE-2018-11776学习笔记
  • CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2
  • ms office学习记录12:Excel学习记录㈥
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的条形码二维码检测系统(深度学习+UI界面+训练数据集+Python代码)
  • npm yarn 一起使用报错
  • 基于springboot实现驾校信息管理系统项目【项目源码+论文说明】计算机毕业设计
  • DXP软件界面显示“No Hard Devices”【简单的操作问题】加【软件下载】
  • 通过Spring Boot 实现页面配置生成动态接口?
  • 【数据结构与算法】:插入排序与希尔排序
  • 前端性能优化——javascript
  • Docker容器化技术(使用Docker搭建论坛)
  • C# ListView 控件使用
  • 【string一些函数用法的补充】
  • 【Go】令牌桶限流算法
  • go的slice学习
  • 软件设计师17--磁盘管理
  • 学点Java打小工——Day2Day3一点作业
  • 【话题】2024年AI辅助研发趋势,有那些应用领域
  • 蓝桥杯——数组切分
  • 【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项
  • 数据库是什么?数据库连接、管理与分析工具推荐
  • 【C#算法实现】可见的山峰对数量
  • Selenium 隐藏浏览器指纹特征的几种方式