【数据库】ACID底层实现原理

article/2025/9/29 19:24:23

前言

我们在学MySQL的时候事务是必须要知道的部分,也就是原子性(Atomic)、一致性(Consistency)、隔离性(isolation)和持久性(Persistence)。知道他的概念其实是远远不够的,现在越来越卷,那么就必须知道的他的原理什么?怎么是实现的。

原理

原子性:

概念

是指事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生。最经典的就是转账案例,我们把转入和转出当做一个事物的话,就需要在SQL中显式指定开启事务。

实现原理:undo log

undo log 是 回滚日志也叫逻辑日志 是实现原子实现事务原子性和隔离性实现的基础。首先我们要清楚的是在实现原子性的是是由一个回滚的操作,回滚就是说我们在执行操作的时候那么我们会执行一个相反的操作来是数据库的状态变成之前为操作的状态。

具体的实现原理:在数据库执行操作的时候,InnoDB会生成一个undo log日志,里面包含的是数据库的SQL语句,如果说数据库的操作失败的时候,会调用rollback,导致事务回滚,那么InnoDB就可以利用undo log 进行一个回滚的操作,具体是如果说你之前执行的是insert操作那么就会执行一个相反的delete操作,之前执行的是delete操作那么就会执行一个insert操作,或者之前执行的是update操作那么就会执行一个反向的update操作。总得来说,就是InnoDB会根据回滚之前生成的undo log操作日志执行相反的操作

一致性

概念

是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。也就是说其他三个事务特性最终的目的的就是为了达到这个一致性效果。

隔离性

概念

指的是多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。需要使用mvcc实现。如果不知道什么是MVCC的或者不知道其底层实现的可以去看我的前面几篇博客,写的很详细。https://blog.csdn.net/Ppphill_C/article/details/123833430?spm=1001.2014.3001.5501

持久性

概念

意味着即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中,不会被回滚

实现原理:redo log

redo log 是事务日志,用于保证事务的持久性。在这之前我们先要知道一下为什么需要用到他然后我们在去掌握我们要怎么用它,以及他的工作原理是什么?

我们都知道在数据库的操作过程中,一开始的话都是直接访问数据库的。所以效率并不是特别的好,并不能满足要求。因此就提出了一个buffer pool 这个概念,其中 buffer pool 是对数据库磁盘数据的一个映射,我们在操作的时候直接去读取buffer pool 就不必去读取数据库,那么buffer pool 会隔一段时间对数据库进行数据的更新操作,那么这一个过程又称 “刷脏”。

有了这个buffer pool 的加入可以大大的加快的数据库的访问速度,整体的提升了工作的效率。但是有一个不好的地方就是,如果说MySQL宕机了,buffer pool 开始刷脏,那么这个时候就会是数据的丢失。这就不符合我们的持久性问题了。因此,就提出了redo log这个日志来保证持久性。

首先我们要知道的是redo log 是采用的一种叫(Write-ahead logging)预先写的方法,换句话就是说所有的修改先写入日志,然后在更新到buffer pool。如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。这样就保证了数据不会因为MySQL宕机而丢失,从而满足持久性的要求。

我们可以根据下面这张图来加深一下理解:
在这里插入图片描述

这边大家应该会有这么一个疑问就是:既然redo log 也可以写入磁盘,那为什么他会比Buffer pool写入的时候更快呢?

  • 刷脏是随机IO,因为每次修改的数据位置随机,但写redo log是追加操作,属于顺序IO

  • ​刷脏是以数据页(Page)为单位的,MySQL默认页大小是16KB,一个Page上一个小修改都要整页写入;而redo log中只包含真正需要写入的部分,无效IO大大减少。这就有点redis中的AOF持久化的工作原理的味道了。

结语

好了,MySQL的事务就讲完了,希望能够给你带来帮助!收工~


http://chatgpt.dhexx.cn/article/X4532c15.shtml

相关文章

数据库-ACID

ACID:原子性、持久性、一致性、独立性 事务的原子性(Atomicity):是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了。比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,…

Mysql ACID详解

ACID简述 Atomicity、Durability实现之 (WALredo log) Atomicity 、Isolation实现之 (锁 OR undo logMVCC) 一、前言 主要是后台程序员都会和数据库打交道,最常用的关系型数据库是MySQL,最常用的存储引擎是…

数据库acid实现原理(二)

一、基础概念 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MyS…

什么是 ACID

MySQL ACID及四种隔离级别的解释 脏读、非重复读、幻读 ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性…

MySQL的ACID是如何实现的?

写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述。 ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomi…

数据库的ACID原则

一、 事务的ACID属性 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状…

ACID理论

ACID 理论是对事务特性的抽象和总结,方便我们实现事务。可以理解成:如果实现了操作的 ACID 特性,那么就实现了事务。 1. 事务是什么 事务可以看成是一个或者多个操作的组合操作,并且它对这个组合操作提供一个保证,如果…

mysql acid

本文实验的测试环境:Windows 10cmdMySQL5.6.36InnoDB 一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间…

数据库ACID四大特性到底为了啥,一文带你看通透

小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL江湖路 | 专栏目录 说起数据库四大特性,同学们张口就来,ACID!那为什么要ACID?每种特性的原理又是什么?如何实现的?废话少说,哈哥今…

ACID是靠什么来保证的?

首先,什么是ACID? 原子性(A): 原子性就是一个事务内的操作,要么全部成功,要么全部失败。一致性(C) 一致性就是一个正确的结果到另一个正确的结果。换句话说就是一个事…

mysql的ACID

ACID是衡量事务的四个特性: 原子性(Atomicity,或称不可分割性)一致性(Consistency)隔离性(Isolation)持久性(Durability) 原子性:语句要么全执行&…

ACID

细节其实很多。。。 1 到底什么是ACID 首先需要说明的是,在IT领域,很多名词在不同的上下文环境中的语义是不同的。例如某些产品宣称支持“100% ACID”和“强一致性”等。那么,这些名词到底指的是什么?如果不结合具体的语境&#x…

[MySQL]事务ACID详解

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1. 事务的概念 2. 事务的特性 3.事务控制语法…

数据库的ACID是什么

欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 事务在当今的企业系统无处不在,即使在高并发环境下也可以提供数据的完整性。一个事务是一个只包含所有读/写操作成功…

谈谈数据库的ACID

谈谈数据库的ACID 帅宏军 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金…

数据库中的 ACID 属性

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 大多数使用数据库的程…

什么是ACID?它的特性是什么?

https://baijiahao.baidu.com/s?id1743501877867119042&wfrspider&forpc ACID是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性&…

事务ACID理解

事务管理(ACID) 谈到事务一般都是以下四点 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据…

vue页面刷新 reload()

首先在vue里配置 在所想添加reload的vue里直接如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190610082256841.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTAxMTkxMA…

重识Nginx - 16 Nginx reload流程浅析

文章目录 图解reload流程1.向master程发送HUP号( reload命令)2.master进程校验配置语法是否正确3.master进程打开新的监听端口4.master进程用新配置启动新的worker 进程5.master进程向老worker 进程发送QUIT号6.老worker进程关闭监听句柄,处理完当前连接后结束进程 图解reload流…