写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述。...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性:事务是最小的执行单位,不允许分割。...一条SQL更新语句怎么运行 持久性肯定和写有关,MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQL 的 ACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务
我们都知道,事务具有 ACID 四个特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。...但你知道 MySQL 是通过什么技术手段来实现的吗? ACID 简介 先来简单回顾一下 ACID 的定义: 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。...那怎么办呢?MySQL 给出的方案是 WAL(Write Ahead Log)机制。WAL 翻译过来就是先写日志的意思。这个日志就是 redo log。...「写写」的情况通过三种锁来实现隔离:Record Lock、Gap Lock 和 Next Key Lock(前两者的组合)。...MVCC + 锁 使得 MySQL 在 RR 级别避免了幻读问题。
作者:无名鼠辈 llc687.top/posts/数据库/mysql的acid 写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性:事务是最小的执行单位,不允许分割。...一条SQL更新语句怎么运行 持久性肯定和写有关,MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQL 的 ACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务
这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同 2事务特性 一个事务都必须包含四条基本特性,这四条特性一般称为ACID (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...那么不同的隔离级别是怎么保证隔离性呢?...这就是依靠MVCC(Multi-Version Concurrency Control)多版本的并发控制实现的。...隔离性的MVCC其实就是依靠它来实现的,原子性也是。实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。...总结 MySQL事务应该大家都知道,但是实现原理可能就不是那么清楚,希望本文能对事务的了解有所帮助。 今天多学一点知识,明天就少说一句求人的话
写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述。...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...一条SQL更新语句怎么运行 持久性肯定和写有关,MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQL 的 ACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务 出处:https://llc687.top/131.html
说到数据库事务,想到的就是要么都做修改,要么都不做,或者是 ACID 的概念。其实事务的本质就是锁、并发和重做日志的结合体。...这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔离性...但是 InnoDB 的标准实现的锁只有 2 类,一种是行级锁,一种是意向锁。 InnoDB 实现了如下两种标准的行级锁: 共享锁(读锁 S Lock),允许事务读一行数据。...首先申请意向锁的动作是 InnoDB 完成的,怎么理解意向锁呢?例如:事务 A 要对一行记录 R 进行上 X 锁,那么 InnoDB 会先申请表的 IX 锁,再锁定记录 R 的 X 锁。...原子性、一致性、持久性 ---- 事务隔离性由锁实现,原子性、一致性和持久性由数据库的 redo log 和 undo log 实现。
前言 最近在面试,有被问到,MySQL的InnoDB引擎是如何实现事务的,又或者说是如何实现ACID这几个特性的,当时没有答好,所以自己总结出来,记录一下。...事务的四大特性ACID 事务的四大特性ACID分别是,A-原子性(Atomicity),C-一致性(Consistency),I-隔离性(Isolation),D-持久性(Durability)。...所以我写的顺序并不是按照ACID来写的,将一致性放到了最后,顺序就变成了,ADIC。...MySQL的InnoDB引擎是靠undo log(回滚日志)来实现的,undo log能够保证在事务回滚时,能够撤销所有已经执行成功的SQL。...总结 MySQL事务的ACID,一致性是最终目的。 保证一致性的措施有: A原子性:靠undo log来保证(异常或执行失败后进行回滚)。
这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同 2事务特性 一个事务都必须包含四条基本特性,这四条特性一般称为ACID (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...MySQL不同的隔离级别,可能存在的问题如下表 事务隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交不可能可能可能可重复读不可能不可能可能序列化不可能不可能不可能 那么不同的隔离级别是怎么保证隔离性呢...这就是依靠MVCC(Multi-Version Concurrency Control)多版本的并发控制实现的。...隔离性的MVCC其实就是依靠它来实现的,原子性也是。实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。...更新时,先改内存中的数据页,将更新操作写入redo log日志,此时redo log进入prepare状态,然后通知MySQL Server执行完了,随时可以提交,MySQL Server将更新的SQL
02 — ACID 特性 A(Atomicity):原子性 原子性是指事务是一个不可分割的工作单位,事务中操作要么都发生,要么都不发生。...所以这时候也就需要用到 undo log 来进行回滚,接下来看一下 undo log 在实现事务原子性时怎么发挥作用的。...先了解一下MySQL的数据存储机制,MySQL的表数据是存放在磁盘上的,因此想要存取的时候都要经历磁盘 IO,然而即使是使用 SSD 磁盘 IO 也是非常消耗性能的。...第三小节:隔离性的实现 隔离性是事务ACID特性里最复杂的一个。在SQL标准里定义了四种隔离级别,每一种级别都规定一个事务中的修改,哪些是事务之间可见的,哪些是不可见的。...) 只要彻底理解了隔离级别以及他的实现原理就相当于理解了ACID里的隔离型。
面试官:“你们是用mysql数据库吧,能简单说说innodb中怎么实现这四大特性的么?” 你:"我只知道隔离性是怎么做的balabala~~" 面试官:"还是回去等通知吧~" OK,回到正题。...但是稍微涉及细节一点,这四大特性在数据库中的实现原理是怎么样的?那就没有几个人能够答得上来了。因此,我们这篇文章着重讨论一下四大特性在Mysql中的实现原理。...如果无法保证持久性会怎么样? 在Mysql中,为了解决CPU和磁盘速度不一致问题,Mysql是将磁盘上的数据加载到内存,对内存进行操作,然后再回写磁盘。...也就是说ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性。...总结 本文讲了Mysql中事务ACID四大特性的实现原理,希望大家有所收获。
写完 redo log,MySQL 就认为事务提交成功了,数据持久化了(ACID的D),然后在空闲的时候,再把内存的数据刷到磁盘。 如果在内存数据刷到磁盘之前,MySQL 掉电了,怎么办?...MySQL 之所以把 binlog 放在了 server 层,说明 binlog 提供了一些通用的能力,比如:数据还原。 DBA 总说,他能把 MySQL 的数据还原到任意时刻,怎么还原?...未完待续 总结一下: redo log: innodb 在实现高性能写数据的同时,利用 redo log,实现了事务 ACID 中的D,持久性 binlog:MySQL 的数据还原、主从复制,都依赖 binlog...来实现 两阶段提交:为了保证 redo log 和 binlog 的一致性 看似一条简单的 update 语句,MySQL 在这背后其实做了很多事情。...你会发现,OMG,MySQL 怎么这么复杂? 大概是,越是看起来运转顺畅的系统,背后越是有复杂的机制来支撑吧。 别看人家看起来很轻松,其实人家背后很努力。
第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。 第三层:存储引擎,负责MySQL中数据的存储和提取。MySQL 中服务器层不管理事务,事务是由存储引擎实现的。...按照严格的标准,只有同时满足ACID特性才是事务;但是目前各大数据库厂商的实现中,真正满足ACID的事务很少。...这里结合MySQL的算法实现来看,下面是MySQL 8.1里面关于这个可见性算法的实现。...redo log file结构是怎么样的? InnoDB 的 redo log 是固定大小的。...总结回顾 InnoDB通过MVVC、undo log和redo log实现了事务的ACID特性, MVCC 是通过 ReadView + undo log 实现的。
实现ACID特性关键原理 InnoDB引擎实现ACID特性的具体方式是通过以下几个关键原理: 原子性(Atomicity) InnoDB使用事务日志(transaction log)来实现原子性。...一致性(Consistency) InnoDB通过实现多版本并发控制(MVCC)来实现一致性。具体来说,当一个事务开始时,InnoDB会为每个事务创建一个独立的快照(snapshot)。...其他并发执行的事务只能看到在其开始时间点之前已经提交的数据版本,从而实现了读写隔离性和一致性。 隔离性(Isolation) InnoDB通过锁和MVCC来实现隔离性。...持久性(Durability) **InnoDB通过将事务日志写入磁盘上的redo log文件来实现持久性。...综上所述:InnoDB引擎通过事务日志、快照、锁和redo log等机制来保证ACID特性的实现。
二、事务ACID特性的实现原理: 1、原子性: 原子性是通过MySQL的回滚日志undo log来实现的:当事务对数据库进行修改时,InnoDB会生成对应的undo log;如果事务执行失败或调用了rollback...: 为了实现事务隔离,数据库延伸出了数据库锁,其中Innodb事务的隔离级别是由锁机制和MVVC(多版本并发控制)实现的: 2.3.1、Mysql锁机制: MySQL锁机制的基本工作原理就是:事务在修改数据库之前...MVCC只在 可重复度 和 读已提交 两个隔离级别下才会工作,其中,MVCC实质就是通过保存数据在某个时间点的快照来实现的。...Buffer Pool的使用可以大大提高了读写数据的效率,但是也带了新的问题:如果MySQL宕机,而此时Buffer Pool中修改的数据在内存还没有刷新到磁盘,就会导致数据的丢失,事务的持久性无法保证...;主要基于redo log实现 隔离性:保证事务执行尽可能不受其他事务影响;InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制(包含next-key lock)、MVCC(包括数据的隐藏列、基于
“ 事务是 MySQL 等关系型数据库区别于 NoSQL 的重要方面,是保证数据一致性的重要手段。 本文将首先介绍 MySQL 事务相关的基础概念,然后介绍事务的 ACID 特性,并分析其实现原理。...,只有同时满足 ACID 特性才是事务;但是在各大数据库厂商的实现中,真正满足 ACID 的事务少之又少。...下面将详细介绍 ACID 特性及其实现原理,为了便于理解,介绍的顺序不是严格按照 A-C-I-D。...ACID 特性及其实现原理 原子性 定义 原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。...总结 下面总结一下 ACID 特性及其实现原理: 原子性:语句要么全执行,要么全不执行,是事务最核心的特性。事务本身就是以原子性来定义的;实现主要基于 undo log。
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。...,只有同时满足ACID特性才是事务;但是在各大数据库厂商的实现中,真正满足ACID的事务少之又少。...下面将详细介绍ACID特性及其实现原理;为了便于理解,介绍的顺序不是严格按照A-C-I-D。...,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致 六、总结 下面总结一下ACID特性及其实现原理: 原子性:语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的...》 《高性能MySQL》 《MySQL运维内参》 https://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_acid https://dev.mysql.com
第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。 第三层:存储引擎,负责MySQL中数据的存储和提取。MySQL中服务器层不管理事务,事务是由存储引擎实现的。...ACID特性才是事务;但是在各大数据库厂商的实现中,真正满足ACID的事务少之又少。...下面将详细介绍ACID特性及其实现原理;为了便于理解,介绍的顺序不是严格按照A-C-I-D。 二、原子性 1....,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致 六、总结 下面总结一下ACID特性及其实现原理: 原子性:语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的...》 《高性能MySQL》 《MySQL运维内参》 https://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_acid https://dev.mysql.com
本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。 MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。...,只有同时满足ACID特性才是事务;但是在各大数据库厂商的实现中,真正满足ACID的事务少之又少。...下面将详细介绍ACID特性及其实现原理;为了便于理解,介绍的顺序不是严格按照A-C-I-D。...,而没有增加接收者的余额,无论数据库实现的多么完美,也无法保证状态的一致 六、总结 下面总结一下ACID特性及其实现原理: 原子性:语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的...》 《高性能MySQL》 《MySQL运维内参》 https://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_acid https://dev.mysql.com
MySQL事务由一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。...MySQL的存储引擎 存储引擎的概念:在MySQL中的数据用各种不同的技术存储在文件或内存中。...-- 查看mysql支持的存储引擎 show engines; 可以使用以上语句查看MySQL支持的存储引擎。...事务的特点 ACID A(Atomicity)原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。...当读取数据时,MySQL 可以通过隐藏列判断是否需要回滚并找到回滚需要的 undo log,从而实现 MVCC。 一致性:一致性是事务追求的最终目标,由前面提到的原子性、持久性和隔离性实现。
它实际上是从四个方面来阐述MySQL 事务的特点,下面就分别来看MySQL 通过什么方式来实现这些特性。 一、原子性 1....InnoDB 中原子性的实现 上面说到,MySQL 中原子性是通过回滚的方式来实现,那么回滚是怎么实现的?这就涉及到MySQL 中的Undo 日志,原子性就是通过 Undo log 来实现的。...2.InnoDB 中持久性的实现 在讲持久性之前,先介绍一下MySQL 中 Buffer pool,我们知道MySQL 数据是存储在磁盘中,为了实现快速读写数据,我们会在内存中设置一个 Buffer pool...具体怎么实现的,我们以这个语句update T set c=c+1 where ID = 2来看: 1.执行器先通过执行引擎查找 ID=2 这一行,如果数据在内存Buffer Pool 中直接返回。...主要就是通过MySQL 中的 MVCC 机制来解决。 四、一致性 一致性的定义与实现 一致性的实现就是在前面三个特性实现的基础上而来的,没有前面三个特性的实现,也就达不到最后数据库事务的一致性。
领取专属 10元无门槛券
手把手带您无忧上云