一文说明白 MySQL 的 ACID 和 几种日志的关系

1、简介

        我们对于MySQL 很熟悉,关于其特性都有一定的了解,但是关于一些具体的实现原理,有的小伙伴可能不太熟悉,而且这部分知识在我们互联网大厂面试中是经常涉及的,因此,本文将带你深入底层,顺利通过面试。

2、MySQL 的四大特性 ACID
2.1、原子性(Atomicity)

        原子性是指一个事务是一个不可分割的整体,在一个事务的中的操作,要么全部成功,要么全部失败,保持整体一致。

2.2、一致性 (Consistency)

           一致性是指事务执行前后,数据处于一种合法的状态,这种状态是语义上的而不是语法上的。 这个状态是满足预定的约束就叫做合法的状态,再通俗一点,这状态是由你自己来定义的。满足这个状态,数据就是一致的,不满足这个状态,数据就是不一致的!

2.3、隔离性 (Isolation)

        隔离性是指多个事务并发执行的时候,一个事务内部的操作与其他事务是相互隔离的,并发执行的各个事务之间不能互相干扰。

2.3.1、隔离级别

1)、read uncommitted (读未提交):两个事务之间能够相互读取对方的修改未提交的数据(会产生脏读)

2)、read committed (读已提交):一个事物在操作过程中,能够读取另一个事务已提交的数据(会产生不可重复读)

3)、Repeatable read(可重复度):在第一次读取操作时生成 ReadView,并且对于记录的更新操作,会对每一条被更新的记录加上next-key锁(等价于行锁+间隙锁)。(会产生幻读)

4)、Serializable(串行化):一个事务一个事务按顺序执行,不会产生任何问题,但是效率低。

2.3.2、数据库隔离级别操作
# 查看数据库的隔离级别 
show variables like '%isolation%' # 在 MySQL 数据库中,默认的事务隔离级别是 REPEATABLE READ
# 设置隔离级别
set session/global transaction isolation level 隔离级别;
2.4、持久性 (Durability)

        持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

3、几种特性实现原理
3.1、原子性(undo log 实现)

        原子性的实现利用 Innodb 的 undo log。 undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。

例如:
1)、当你delete一条数据时,就需要记录这条数据操作信息,回滚的时候,insert这条旧数据。
2)、当你update一条数据时,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作。
3)、当年insert一条数据时,就需要这条记录的主键,回滚的时候,根据主键执行delete操作。

        undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

3.2、一致性

        从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。也就是说ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性。

3.3、隔离性(undo log 实现)

        隔离性的实现利用的是MVCC机制。MVCC(多版本并发控制:Multi Version Concurrency Control),一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。 如果一个事务读取的行正在做DELELE或者UPDATE操作,读取操作不会等行上的锁释放,而是读取该行的快照版本。

注意:在事务隔离级别为读已提交(Read Commited)时,一个事务能够读到另一个事务已经提交的数据,是不满足隔离性的。但是当事务隔离级别为可重复读(Repeateable Read)中,是满足隔离性的。

3.4、持久化(redo log实现)

        当做数据修改的时候,不仅在内存中操作,还会在redo log中记录这次操作。当事务提交的时候,会将redo log日志进行刷盘(redo log一部分在内存中,一部分在磁盘上)。当数据库宕机重启的时候,会将redo log中的内容恢复到数据库中,再根据 undo log 和 binlog 内容决定回滚数据还是提交数据。

redo log 特点:

1)、redo log体积小,毕竟只记录了哪一页修改了啥(物理记录),因此体积小,刷盘快。

2)、redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快。

3.5、二进制日志文件(binlog)

        关于二进制文件的详细说明,参考博客:MySQL 和 Redis 如何保证数据一致性,通过MySQL的binlog实现-CSDN博客

4、总结

         本文详细介绍了MySQL的四大特性和隔离级别相关知识,关于如何实现 MVCC 机制敬请关注后续内容更新,以上知识点是我们在面试过程中经常遇到的问题,掌握原理能够让我们更好使用MySQL。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实验笔记之——基于TUM-RGBD数据集的SplaTAM测试

之前博客对SplaTAM进行了配置,并对其源码进行解读。 学习笔记之——3D Gaussian SLAM,SplaTAM配置(Linux)与源码解读-CSDN博客SplaTAM全称是《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》,…

c JPEG 1D DCT

步骤: 1. 对yuv 88 数据 8行分别1D DCT 2, 用8行 1D DCT 得到的数据生成中间88 块 Zj 3,对Zj 的8列再 1D DCT 后生成8列,用这8列组合成8*8的2D DCT 系数 准备用此1D DCT程序代替以前写的2D DCT,看能减少多少编码时间。 看网上文章,ffmpeg用…

【AI预测】破晓未来教育市场:如何精准定位、精选师资并启动高潜力培训项目

在当前全球化和技术快速迭代的背景下,各行业正面临巨大的人才缺口和新的发展机遇。 全球化浪潮,各行业如同搭乘上了一列高速列车,不断深入探索并广泛应用AI技术以提升产业效率、创新服务模式。在智能制造领域,工业4.0时代犹如给…

【Java 设计模式】结构型之适配器模式

文章目录 1. 定义2. 应用场景3. 代码实现结语 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端期望的另一个接口。这种模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。在本文中,我…

骨传导蓝牙耳机怎么使用?使用骨传导耳机对人体有没有伤害?

骨传导蓝牙耳机的使用方法和传统的入耳式蓝牙耳机使用方法相差无几,都是通过蓝牙来进行连接使用,但骨传导耳机会自带内存,所以在此前提上可以存储音乐独立使用,比传统的入耳式蓝牙耳机使用更方便一些。 那么使用骨传导耳机会不会对…

[一]ffmpeg音视频解码

[一]ffmpeg音视频解码 一.编译ffmpeg1.安装vmware虚拟机2.vmware虚拟机安装linux操作系统3.安装ftp和fshell软件4.在Ubuntu(Linux)中编译Android平台的FFmpeg( arm和x86 )5.解压FFmpeg6.Android编译脚本(1)…

Spring Security工作原理(一)

过滤器 Spring Security的Servlet支持是基于Servlet过滤器的,因此首先了解过滤器的一般作用是很有帮助的。下图显示了单个HTTP请求处理程序的典型分层结构。 处理客户端发送的请求时,容器创建一个FilterChain,其中包含Filter实例和Servlet&a…

Rust-泄漏

在C中,如果引用计数智能指针出现了循环引用,就会导致内存泄漏。而Rust中也一样存在引用计数智能指针Rc,那么Rust中是否可能制造出内存泄漏呢? 内存泄漏 首先,我们设计一个Node类型,它里面包含一个指针,可以指向其他…

C++类与对象【友元】

🌈个人主页:godspeed_lucip 🔥 系列专栏:C从基础到进阶 🎄1 友元🥑1.1 全局函数做友元🥑1.2 类做友元🥑1.3 成员函数做友元 🕮2 总结 🎄1 友元 生活中你的家…

xml裁剪标注目标并外扩

import glob import xml.etree.ElementTree as ET import cv2 from PIL import Image import os def change_xmlfile(path)

HCIA-H12-811题目解析(11)

1、下列哪个属性不能作为衡量COST的参数? 2、RSTP协议使用P/A机制加快了上游端口转到Forwarding状态的速度,但是却没有出现临时环路的原因是什么? 3、网络管理员在三层交换机上创建了VLAN10,并在该VLAN的虚拟接口下配置了IP地址…

EtherNet/IP协议开发2:在ubuntu测试

下载源码: git clone https://github.com/EIPStackGroup/OpENer编译 首先进入目录 /big/opener/OpENer/bin/posix 执行脚本: lkmaoubuntu:/big/opener/OpENer/bin/posix$ ./setup_posix.sh 执行make lkmaoubuntu:/big/opener/OpENer/bin/posix$ mak…

基于arcgis js api 4.x开发点聚合效果

一、代码 <html> <head><meta charset"utf-8" /><meta name"viewport"content"initial-scale1,maximum-scale1,user-scalableno" /><title>Build a custom layer view using deck.gl | Sample | ArcGIS API fo…

SPEC CPU 2017 quick start

SPEC CPU 2017 quick start 我这里选择在 linux&#xff08;ubuntu22.04.3&#xff09; 上安装 SPEC CPU 2017&#xff0c;gcc、g、gfortran 均使用 sudo apt install xxx 安装&#xff08;其版本为11.4.0&#xff09; 官方的 SPEC CPU 2017 在 Unix Systems 安装示例&#x…

2024-01-18 在Android Studio中,可以通过修改build.gradle文件(位于你的应用模块目录下)来自定义生成的APK名称

一、在Android Studio中&#xff0c;可以通过修改build.gradle文件&#xff08;位于你的应用模块目录下&#xff09;来自定义生成的APK名称&#xff0c;在build.gradle里面增加下面的代码 applicationVariants.all { variant ->variant.outputs.all {outputFileName "…

349. 两个数组的交集(力扣)(OJ题)

题目链接&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 个人博客主页&#xff1a;https://blog.csdn.net/2301_79293429?typeblog 专栏&#xff1a;https://blog.csdn.net/2301_79293429/category_12545690.html 给定两个数组 nums1 和 nums2 &a…

json-server的基础使用

json-server 是什么? 用来快速搭建模拟的 REST API 的工具包 可以30秒内快速为我们搭建一个假的基于 REST API的服务 我们要如何使用呢&#xff1f; 1.先安装 //全局安装 npm i -g json-server 2.创建文件 db.json 我们需要在db.json放入一点内容 放入示例&#xff1a; {/…

用 Python 制作可视化 GUI 界面,一键实现证件照背景颜色的替换

今天&#xff0c;我们来分享一下如何通过Python的十来行代码来替换证件照的背景颜色&#xff0c;那么在最后&#xff0c;小编也会将上述的流程制作成一个GUI界面来方便大家使用。关于界面的大致模样其实和先前的相差不大&#xff0c;大家应该都看过上一篇的内容 界面大体的样子…

Python项目——久坐提醒定时器(PySide6)编写

1、介绍 使用Python编写一个久坐提醒软件。功能&#xff1a; 设置工作时间。设置休息时间。选择休息时是否播放音乐。休息时&#xff0c;软件置顶&#xff0c;且不能关闭。 2、工具 语言&#xff1a;python3.11UI设计工具&#xff1a;Qt designer编译器&#xff1a;PyCharm包…

北斗卫星:助力社区矫正人员追踪与管理的科技突破

北斗卫星&#xff1a;助力社区矫正人员追踪与管理的科技突破 社区矫正人员是一个重要的社会群体&#xff0c;他们的安全和管理对于社会的和谐稳定至关重要。随着技术的飞跃发展&#xff0c;北斗卫星系统作为我国自主研发的卫星导航系统&#xff0c;正逐渐在社区矫正工作中发挥…