MySQL事务的底层实现原理

MySQL事务的作用呢,就是要保证数据库的可靠性、一致性、并发处理。那实现事务需要三个技术,分别是日志文件,包括redo log 和 undo log、锁技术、MVCC。

那什么是redo log呢,redo log是用来记录已提交事务的修改语句的,因为数据库为了保证效率,每次修改操作,并不会马上落盘,而是会先存放到内存缓冲区中,这样的话就有一个问题,当服务器宕机的时候,内存数据就没了,这时候就用到了redo log,它可以保障已提交事务的持久化特性。

那什么是undo log呢,undo log是用来记录数据被修改前的信息,当发生回滚时,可以根据undo log回滚到没被修改之前的状态。

锁技术是指读写锁,通过读写锁,可以做到读读可以并行,但是不能做到写读,写写并行。

MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制,InnoDB的 MVCC ,是通过在每行记录的后面保存两个隐藏的列来实现的,这两个列,一个保存了行的创建时间,一个保存了行的过期时间,当然存储的并不是实际的时间值,而是系统版本号,他的主要实现思想是通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行.。

MVCC在mysql中的实现依赖的是undo log与read view,undo log 中记录的是某行数据的多个版本的数据。read view 用来判断当前版本数据的可见性。

事务有四个特性,分别是

  • 原子性(Atomicity)

  • 一致性(Consistency)

  • 隔离型(Isolation)

  • 持久性(Durability)

那MySQL是怎么保证这4个特性的呢

  • 原子性:使用 undo log ,从而达到回滚
  • 持久性:使用 redo log,从而达到故障后恢复
  • 隔离性:使用锁以及MVCC,运用的优化思想有读写分离,读读并行,读写并行
  • 事务的终极大 boss 一致性是通过原子性,持久性,隔离性来实现的!!!通过回滚,以及恢复,和在并发环境下的隔离做到一致性。

原子性,持久性,隔离性的目的也是为了保障数据的一致性!

总之,ACID只是个概念,事务最终目的是要保障数据的可靠性,一致性。

参考

  1. MySQL事务的底层实现原理_xlshi1996的博客-CSDN博客
  2. mysql事务底层实现原理 - 百度文库

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

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

相关文章

源码分析——ArrayList源码+扩容机制分析

文章目录 1. ArrayList 简介1.1. Arraylist 和 Vector 的区别?1.2. Arraylist 与 LinkedList 区别? 2. ArrayList 核心源码解读3. ArrayList 扩容机制分析3.1. 先从 ArrayList 的构造函数说起3.2. 一步一步分析 ArrayList 扩容机制3.2.1. 先来看 add 方法3.2.2. 再来看看 ens…

篇十七:备忘录模式:恢复对象状态

篇十七:"备忘录模式:恢复对象状态" 开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 另外有2本不错的关于设计模式的资料&…

Day10 CDQ 分治

三维偏序 CDQ 分治入门题。 采用分治思想,对于编号在 [ l , r ] [l,r] [l,r] 中的点对,统计都在 [ l , m i d ] [l,mid] [l,mid] 的,都在 [ m i d 1 , r ] [mid1,r] [mid1,r] 的,再统计跨两个的。 代码 iai 统计三元组 严…

Visual Studio 2022安装教程(英文版)

文章目录 1.下载安装 1.下载 官网地址:https://visualstudio.microsoft.com/zh-hans/vs/ 选择第一个社区版本:Community 2022 安装 1.将下载好的文件保存到桌面,双击点开 2.等待visual studio installer配置好 3.点击安装后会来到配件选…

搭建本地开发服务器

搭建本地开发服务器 :::warning 注意 在上一个案例的基础上添加本地开发服务器,请保留上个案例的代码。如需要请查看 Webpack 使用。 ::: 搭建本地开发服务器这一个环节是非常有必要的,我们不可能每次修改源代码就重新打包一次。这样的操作是不是太繁琐…

Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑

Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑 现在想对一个接口做性能测试,需要测试它多个线程并发下的调用 1.新建测试计划和线程组 略 2.新建http接口 一个完整的http接口包含请求头和请求,这里就需要两个组件:HTTP request、HT…

clickhouse功能使用

离线聚合 物化视图 clickhouse需在AggregatingMergeTree之上建立物化视图来完成聚合的效果。以小时聚合为例说明 首先创建表,此处是本地表,且没有副本 #创建表 CREATE TABLE datasets.bt_stats (`btname` String,`record` UInt64,`EventTime` DateTime

群狼调研(湖南市场调查公司):4S店神秘顾客调查注意事项

群狼调研(湖南市场调查公司)受顾客委托开展汽车汽车4S店神秘顾客调查,汽车4S店神秘顾客调查执行注意事项: 1. 保持匿名性:作为神秘顾客,确保自己的身份和目的不被店员发现。不要透露自己是进行调查的顾客。 2. 准备充分&#xf…

【iOS】RunLoop

前言-什么是RunLoop? 什么是RunLoop? 跑圈?字面上理解确实是这样的。 Apple官方文档这样解释RunLoop RunLoop是与线程息息相关的基本结构的一部分。RunLoop是一个调度任务和处理任务的事件循环。RunLoop的目的是为了在有工作的时候让线程忙起来&#…

ChatGPT实战:创业咨询,少走弯路,少踩坑

用九死一生形容创业再适合不过,不过一旦成功回报也很诱人,这也是为什么那么多人下场创业。纸上得来终觉浅,绝知此事要躬行,创过业的人都知道其中的心酸,而他们也建议你去创业,因为那真不是一般人能干的事。…

微服务详解

微服务 什么是微服务? 微:单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来只需要两个披萨就够了 服务:一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知的最…

力扣17(电话号码中的字符组合)

题目表述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例1 输入:digits "23" 输出&#xff1…

SpringBoot集成百度人脸识别实现登陆注册功能Demo(二)

前言 上一篇SpringBoot集成百度人脸demo中我使用的是调用本机摄像头完成人脸注册,本次demo根据业务需求的不同我采用文件上传的方式实现人脸注册。 效果演示 首页 注册 后端响应数据: 登录 后端响应数据: 项目结构 后端代码实现 1、Bai…

数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)

目录 数字关键词的散列函数构造 直接定址法 除留余数法 数字分析法 折叠法 平方取中法 字符关键词的散列函数构造 ASCII码加和法 前三字符移位法 移位法 数字关键词的散列函数构造 一个“好”的散列函数一般应考虑下列两个因素: 计算简单,以…

QT生成可执行文件的步骤

QT生成可执行文件的步骤 第一步:debug为release,然后进行编译 第二步:添加QT生成必要的库 首先,建立一个新的文件夹,然后将Release中的可执行文件拷贝到新的文件夹中 然后,在新建文件夹中生成必要的库 …

Nginx(1)

目录 1.Nginx概述2.Nginx的特点3.Nginx主要功能1.反向代理2.负载均衡 1.Nginx概述 Nginx (engine x) 是一个自由的、开源的、高性能的HTTP服务器和反向代理服务器,也是一个IMAP、POP3、SMTP代理服务器。 Nginx是一个强大的web服务器软件,用于处理高并发…

别再被问倒了!Mysql索引竟然在这些情况下失灵?

嗨,亲爱的读者们!小米又来啦~ 今天我们要聊一个在数据库面试中常常被问到的热门话题:Mysql索引失效。想要在面试中脱颖而出,掌握这个知识点可是必不可少哦!废话不多说,咱们现在就深入剖析一下,看…

开源网络探测和安全评估工具nmap的实践

1.nmap简介 Nmap(Network Mapper)是一个广泛使用的开源网络探测和安全评估工具。它最初由Gordon Lyon(也被称为Fyodor Vaskovich)开发,并且在网络管理员、安全研究人员和黑客等领域被广泛应用。 Nmap具有许多功能&am…

C#,数值计算——基于模拟退火的极小化问题单纯形(下山)算法的计算方法与C#源程序

1 模拟退火 模拟退火算法其实是一个类似于仿生学的算法,模仿的就是物理退火的过程。 我们炼钢的时候,如果我们急速冷凝,这时候的状态是不稳定的,原子间杂乱无章的排序,能量很高。而如果我们让钢水慢慢冷凝&#xff0c…

小研究 - 微服务系统服务依赖发现技术综述(一)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…