首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 是如何实现 ACID 的?

我们都知道,事务具有 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 级别避免了幻读问题。

98240
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL 是如何实现 ACID 的?

作者:无名鼠辈 llc687.top/posts/数据库/mysqlacid 写在前面 本文主要探讨MySQL InnoDB 引擎下ACID实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性:事务是最小的执行单位,不允许分割。...一条SQL更新语句怎么运行 持久性肯定和写有关,MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQLACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务

91020

MySQL是如何实现事务ACID的?

这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同 2事务特性 一个事务都必须包含四条基本特性,这四条特性一般称为ACID (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...那么不同的隔离级别是怎么保证隔离性呢?...这就是依靠MVCC(Multi-Version Concurrency Control)多版本的并发控制实现的。...隔离性的MVCC其实就是依靠它来实现的,原子性也是。实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。...总结 MySQL事务应该大家都知道,但是实现原理可能就不是那么清楚,希望本文能对事务的了解有所帮助。 今天多学一点知识,明天就少说一句求人的话

58810

架构必知:MySQL 如何实现 ACID

写在前面 本文主要探讨MySQL InnoDB 引擎下ACID实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述。...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...一条SQL更新语句怎么运行 持久性肯定和写有关,MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQLACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务 出处:https://llc687.top/131.html

34810

MySQL是如何实现事务的ACID

前言 最近在面试,有被问到,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来保证(异常或执行失败后进行回滚)。

1.3K10

MySQL DBA亲授MySQL InnoDB事务ACID实现原理

说到数据库事务,想到的就是要么都做修改,要么都不做,或者是 ACID 的概念。其实事务的本质就是锁、并发和重做日志的结合体。...这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔离性...但是 InnoDB 的标准实现的锁只有 2 类,一种是行级锁,一种是意向锁。 InnoDB 实现了如下两种标准的行级锁: 共享锁(读锁 S Lock),允许事务读一行数据。...首先申请意向锁的动作是 InnoDB 完成的,怎么理解意向锁呢?例如:事务 A 要对一行记录 R 进行上 X 锁,那么 InnoDB 会先申请表的 IX 锁,再锁定记录 R 的 X 锁。...原子性、一致性、持久性 ---- 事务隔离性由锁实现,原子性、一致性和持久性由数据库的 redo log 和 undo log 实现

1.1K30

MySQL是如何实现事务ACID的?

这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同 2事务特性 一个事务都必须包含四条基本特性,这四条特性一般称为ACID (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...MySQL不同的隔离级别,可能存在的问题如下表 事务隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交不可能可能可能可重复读不可能不可能可能序列化不可能不可能不可能 那么不同的隔离级别是怎么保证隔离性呢...这就是依靠MVCC(Multi-Version Concurrency Control)多版本的并发控制实现的。...隔离性的MVCC其实就是依靠它来实现的,原子性也是。实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。...更新时,先改内存中的数据页,将更新操作写入redo log日志,此时redo log进入prepare状态,然后通知MySQL Server执行完了,随时可以提交,MySQL Server将更新的SQL

84520

MySQLACID 底层内部实现原理详解

02 — ACID 特性 A(Atomicity):原子性 原子性是指事务是一个不可分割的工作单位,事务中操作要么都发生,要么都不发生。...所以这时候也就需要用到 undo log 来进行回滚,接下来看一下 undo log 在实现事务原子性时怎么发挥作用的。...先了解一下MySQL的数据存储机制,MySQL的表数据是存放在磁盘上的,因此想要存取的时候都要经历磁盘 IO,然而即使是使用 SSD 磁盘 IO 也是非常消耗性能的。...第三小节:隔离性的实现 隔离性是事务ACID特性里最复杂的一个。在SQL标准里定义了四种隔离级别,每一种级别都规定一个事务中的修改,哪些是事务之间可见的,哪些是不可见的。...) 只要彻底理解了隔离级别以及他的实现原理就相当于理解了ACID里的隔离型。

1.1K50

MySQLACID原理!

面试官:“你们是用mysql数据库吧,能简单说说innodb中怎么实现这四大特性的么?” 你:"我只知道隔离性是怎么做的balabala~~" 面试官:"还是回去等通知吧~" OK,回到正题。...但是稍微涉及细节一点,这四大特性在数据库中的实现原理是怎么样的?那就没有几个人能够答得上来了。因此,我们这篇文章着重讨论一下四大特性在Mysql中的实现原理。...如果无法保证持久性会怎么样? 在Mysql中,为了解决CPU和磁盘速度不一致问题,Mysql是将磁盘上的数据加载到内存,对内存进行操作,然后再回写磁盘。...也就是说ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性。...总结 本文讲了Mysql中事务ACID四大特性的实现原理,希望大家有所收获。

1.6K30

MySQL 是如何实现 ACID 中的 D 的?

写完 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 怎么这么复杂? 大概是,越是看起来运转顺畅的系统,背后越是有复杂的机制来支撑吧。 别看人家看起来很轻松,其实人家背后很努力。

88430

mysql的InnoDB引擎实现ACID特性的原理

实现ACID特性关键原理 InnoDB引擎实现ACID特性的具体方式是通过以下几个关键原理: 原子性(Atomicity) InnoDB使用事务日志(transaction log)来实现原子性。...一致性(Consistency) InnoDB通过实现多版本并发控制(MVCC)来实现一致性。具体来说,当一个事务开始时,InnoDB会为每个事务创建一个独立的快照(snapshot)。...其他并发执行的事务只能看到在其开始时间点之前已经提交的数据版本,从而实现了读写隔离性和一致性。 隔离性(Isolation) InnoDB通过锁和MVCC来实现隔离性。...持久性(Durability) **InnoDB通过将事务日志写入磁盘上的redo log文件来实现持久性。...综上所述:InnoDB引擎通过事务日志、快照、锁和redo log等机制来保证ACID特性的实现

12410

详述MySQL事务及ACID特性的实现原理

“ 事务是 MySQL 等关系型数据库区别于 NoSQL 的重要方面,是保证数据一致性的重要手段。 本文将首先介绍 MySQL 事务相关的基础概念,然后介绍事务的 ACID 特性,并分析其实现原理。...,只有同时满足 ACID 特性才是事务;但是在各大数据库厂商的实现中,真正满足 ACID 的事务少之又少。...下面将详细介绍 ACID 特性及其实现原理,为了便于理解,介绍的顺序不是严格按照 A-C-I-D。...ACID 特性及其实现原理 原子性 定义 原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。...总结 下面总结一下 ACID 特性及其实现原理: 原子性:语句要么全执行,要么全不执行,是事务最核心的特性。事务本身就是以原子性来定义的;实现主要基于 undo log。

72330

MySQL数据库:事务和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(包括数据的隐藏列、基于

62820

深入学习MySQL事务:ACID特性的实现原理

事务是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

54710

深入学习MySQL事务:ACID特性的实现原理

第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。 第三层:存储引擎,负责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

1.2K50

深入学习MySQL事务:ACID特性的实现原理

本文将首先介绍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

59720

重温MySQLACID实现原理:深入探索底层设计与机制

当我们谈论关系型数据库时,ACID属性是不可避免的核心话题。...在本文中,我们将深入探讨MySQL数据库如何实现这些原则,以及这些实现背后的底层设计和机制。...二、一致性(Consistency)的实现 一致性,作为ACID(原子性、一致性、隔离性、持久性)模型的一部分,要求数据库事务必须保证数据库从一个一致的状态转变到另一个一致的状态。...四、持久性(Durability)的实现 持久性(Durability)是数据库事务的四个基本属性(ACID)之一,它确保一旦事务被提交,其对数据库中数据的修改就是永久性的。...综上所述,MySQL通过重做日志、双写缓冲以及其他辅助技术来实现事务的持久性。这些机制共同工作,确保了在各种故障场景下数据的可靠性和恢复能力。 总结: ACID属性是关系型数据库事务处理的核心原则。

8110

MySQL 学习笔记(一)MySQL 事务的ACID特性

它实际上是从四个方面来阐述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 机制来解决。 四、一致性 一致性的定义与实现 一致性的实现就是在前面三个特性实现的基础上而来的,没有前面三个特性的实现,也就达不到最后数据库事务的一致性。

15970
领券