【MySQL进阶】事务隔离级别 MVCC

news2024/9/21 10:34:50

目录

MySQL事务隔离级别

1. 读未提交(Read Uncommitted)

2. 读已提交(Read Committed)

3. 可重复读(Repeatable Read)(默认隔离级别)

4. 串行化(Serializable)

表格总结

 MVCC

概念

工作原理

快照读

当前读

undo log日志版本链

readview


MySQL事务隔离级别

1. 读未提交(Read Uncommitted)

  • 特性:最低的隔离级别,事务可以读取未提交的数据。
  • 问题:会产生脏读(Dirty Read),即一个事务可以读到另一个事务未提交的数据变更。
  • 适用场景:几乎不使用,因为它不能保证数据的一致性。

2. 读已提交(Read Committed)

  • 特性:只能读取已经提交的数据,避免了脏读问题。
  • 问题:可能会产生不可重复读(Non-repeatable Read),即同一事务中的两次读取操作可能会得到不同的结果,因为其他事务可能在中间提交了更新。
  • 适用场景:多数数据库系统(如Oracle)默认的隔离级别,适用于读取数据一致性要求不高的场景。

3. 可重复读(Repeatable Read)(默认隔离级别)

  • 特性:同一事务中多次读取相同数据时,结果是一样的,即使其他事务修改了数据并提交。在MySQL中是默认的隔离级别。
  • 问题:可能会产生幻读(Phantom Read),即同一事务中的两次查询操作可能会因为其他事务插入了(或者删除了)新的行而得到不同的结果。
  • 适用场景:大多数应用程序的默认选择,能较好地平衡并发性和一致性。

4. 串行化(Serializable)

  • 特性:最高的隔离级别,通过对所有读取的数据加锁,强制事务串行执行,避免了脏读、不可重复读和幻读问题。
  • 问题:并发性能较差,因为事务必须依次执行。
  • 适用场景:需要严格一致性的数据操作场景,但因为性能开销较大,一般不常用。

表格总结

隔离级别脏读不可重复读幻读并发性应用场景
读未提交可能可能可能最高几乎不用
读已提交不可能可能可能较高读取一致性要求不高的场景
可重复读不可能不可能可能中等MySQL默认,适用于大多数应用程序
串行化不可能不可能不可能最低数据严格一致性要求高的场景,但较少使用

 MVCC

概念

多版本并发控制(MVCC)是一种用于数据库管理系统中处理并发的机制,旨在提高数据库的并发性能和数据一致性。MySQL中的InnoDB存储引擎采用MVCC来实现隔离级别(可重复读)。

工作原理

MVCC通过维护多个数据版本来允许并发的读写操作,而不需要加锁。 每个事务会看到一个数据的一致性快照,这个快照是在事务开始时生成的。

快照读

MVCC机制实现了快照读,普通select查询就是快照读,快照读到数据有可能不是最新的数据,它主要是为了实现可重复读的事务隔离级别。

当前读

在更新数据时读取的是当前最新的数据,而不是快照数据。

undo log日志版本链

它其实就是把每次修改的数据都会保存一份,然后在每条数据基础上增加两个隐藏列,trx_id,roll_pointer,分别存储当前事务ID和上一版本的数据地址。每次对数据进行修改时,InnoDB会将修改前的数据记录到undo log中,从而保留了数据的多个版本。通过undo log,事务能够回滚到之前的状态,以实现原子性。

readview

在可重复读的事务里面,这个readview视图由未提交的事务id数组和已创建的最大事务id(max_id)组成,因此这个最大的 max_id 可能在数组里面,也可能不在,因为事务最大的id可能先提交,而数组里面的id都是未提交的

[trx_id1,trx_id2],max_id

Undo log和read view是InnoDB实现MVCC的重要组件。undo log记录数据的历史版本,使得事务能够回滚和实现一致性读;read view用于事务读取数据时判断数据版本的可见性。通过这两者的结合,InnoDB实现了高效的多版本并发控制,保证数据的一致性和隔离性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1967423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++栈和队列(容器适配器)

目录 1.什么是适配器? 2.栈(stack) 3.队列(queue) 4.双端队列(deque) 5.优先级队列(priority_queue) 1.什么是仿函数? 2.仿函数有什么用? 3.优先级队列(priority_queue) 1.什么是适配器? 我们之前实现栈和队列&#xff0…

QTCreate中使用git进行代码的备份

一开始使用QTCreate设计UI时,都是手动保存,后面觉得应该升级一下自己的技术栈,把git工具学了一些,摸索两天。首先,git是一个版本控制工具,正常开发需要一个master和一个你自己需要的分支,在分支…

批量下载 B 站 视频的工具 downkyi

批量下载 B 站 视频的工具 downkyi 亲测好用 图片: 下载地址: https://github.com/leiurayer/downkyi

SQL Server Profiler 只查看当前操作的语句

1.打开Sql Server Manage Studio,登录->工具->SQL Server Profiler->链接 点击事件选择 点击列筛选器 点击spid 输入对应的spid 如果不知道你的spid是多少的话,你可以先不筛选,直接运行,然后开启跟踪再运行一个独特的…

【项目管理】项目经理管理表单(及全套资料)

PM项目管理模板 甘特图 OKR周报 团队任务 工作总结

有没有比较好用的家用洗地机推荐?一文搞懂洗地机哪种牌子好

如今洗地机在我们家庭清洁中,已经很常见了,它可以让我们快速的完成地面清洁的工作,无需我们手动去清洗滚布,大大的节省了我们清洁时间,而且清洁效果也更加到位。但是目前市面上的洗地机型号多到让人眼花缭乱&#xff0…

Android开发之组件化

#来自ウルトラマンゼロ(哉阿斯) 1 简介 通俗来讲,将一个功能完整的 App 或模块拆分成多个子模块, 每个子模块可以独立编译和运行。也可以任意组合成另一个新的 App 或模块, 每个模块即不相互依赖但又可以相互交互, 遇到某些特殊情况甚至可以升…

RN 开发环境搭建(Windows For Android)

传送门:官网的搭建步骤(英文) 传送门:官网的搭建步骤(中文) 注:教程写于2022年11月21日,当时也是根据官网步骤一步步操作的。现在时隔2年,最新的 RN 版本(V…

在现有的vue3项目中 配置electron

Vue项目已创建,在此基础上安装electron 配置步骤: 装依赖 yarn install装electron安装concurrently ( 一条命令实现同时启动vue项目和electron)安装nodemon (实现热更新) 一、配置途中遇到的问题: 1. 安装 yarn add electron -D 一直卡在这…

连锁企业组网的优化解决方案

对于连锁企业来说,建立高效的网络组网很重要,因为它直接影响到各分支机构之间的信息共享、管理效率和业务流程的顺畅。一个理想的解决方案需要从多个角度入手,以确保网络的稳定性、安全性和可扩展性。 首先,需要选择合适的网络拓扑…

stm32番外-----0.96寸OLED播放电影《你的名字》

目录 前言 OLED播放视频 1.简述 2.现象 3.电路连接图​编辑 4.项目主要文件 5.代码 6.注意事项 前言 刚好前面学习了USART串口通信,本期咱们来玩个有意思的,就是去通过USART实现视频的播放,本期内容程序是来自江协科技的&#xf…

Getty 携手英伟达升级商业文生图 AI 模型;苹果新专利探索「心跳」解锁 iPhone 丨 RTE 开发者日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

中科院4区救命神刊!主打不让任何一个人延毕~沾边可录!

【SciencePub学术】本期,小编给大家推荐一本JCR2区中科院4区的“救命神刊”!征稿领域可谓是相当广泛,且国人友好,计算机领域的学者可以考虑一下这本期刊! 期刊解析 KNOWLEDGE AND INFORMATION SYSTEMS 《知识与信息系统…

计算机毕业设计选题推荐-学院教学工作量统计系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Unity后处理(Post-processing)

Unity post-processing 就像是对图片采用滤镜一样(如下图对比)对当前场景显示做一定的显示处理,使得场景更漂亮、有趣或者有型。 视觉风格与视觉保真 游戏场景后处理能够达到所需的视觉风格(visual style)同时也保证视…

【Stack和Queue模拟实现】

Stack和Queue模拟实现 小杨 在模拟实现之前,有必要介绍一下什么是容器适配器 容器适配器 适配器是一种设计模式,该种模式是将一个类的接口转换成客户希望的另一个接口。 虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的…

星环科技推出革新性智能业务分析洞察平台——无涯·问数

5月30-31日,2024向星力未来数据技术峰会期间,星环科技重磅发布一款新产品无涯问数——智能业务分析洞察平台。该产品旨在解决传统BI在数据获取、使用门槛和效率方面的挑战,为决策者和业务人员带来前所未有的数据分析体验。 无涯问数的问世&am…

丰田生产方式:拒绝表面效率!!!

在需要的时间,一件一件地生产所需要的东西,就可以避免“过量生产的浪费”。但是,这时你必须知道“需要的时间”是在什么时候。于是,“单位时间”的意义就很重要了。 所谓“单位时间”,就是指制造一件产品的时间。这必须…

【开源分享】2024最新php在线客服系统源码|聊天系统 附搭建教程

源码的主要特色 自动回复和机器人知识库:通过后台设置机器人知识库,系统可以根据关键词自动回复用户,提高响应速度和服务效率。 内容过滤:支持设置违禁词,避免接收包含不良信息的用户消息,维护平台健康。…

黑马JavaWeb后端案例开发(包含所有知识点!!!)

目录 1.准备工作 环境搭建 开发规范 REST(REpresentation State Transfer),表述性状态转换,它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…