写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述。...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性:事务是最小的执行单位,不允许分割。...如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQL 的 ACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务
本文公众号来源:孤独烟 作者:孤独烟 原作者通俗易懂讲解了ACID的一些知识点!我觉得写得非常不错,建议阅读! 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?"...你:"懂,ACID嘛,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)!"...因此,我们这篇文章着重讨论一下四大特性在Mysql中的实现原理。 正文 我们以从A账户转账50元到B账户为例进行说明一下ACID,四大特性。...因为你定义了一个状态,要求A+B的余额必须不变。 实战解答 问题一:Mysql怎么保证一致性的? OK,这个问题分为两个层面来说。 从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。...总结 本文讲了Mysql中事务ACID四大特性的实现原理,希望大家有所收获。
我们都知道,事务具有 ACID 四个特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。...但你知道 MySQL 是通过什么技术手段来实现的吗? ACID 简介 先来简单回顾一下 ACID 的定义: 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。...MVCC + 锁 使得 MySQL 在 RR 级别避免了幻读问题。...MySQL 中保证一致性主要靠 CR(Crash Recovery)和 DWB(Doublewrite Buffer)来保证的。...比如转账的业务场景,如果说它属于一致性的范畴,也能够说得通,可以叫「用户自定义一致性」;另外,隔离性使得事务之间互不影响的最终效果也是保证了数据的一致。 - 完
作者:无名鼠辈 llc687.top/posts/数据库/mysql的acid 写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性:事务是最小的执行单位,不允许分割。...如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQL 的 ACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务
MySQL事务由一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。...MySQL的存储引擎 存储引擎的概念:在MySQL中的数据用各种不同的技术存储在文件或内存中。...-- 查看mysql支持的存储引擎 show engines; 可以使用以上语句查看MySQL支持的存储引擎。...事务的特点 ACID A(Atomicity)原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。...当读取数据时,MySQL 可以通过隐藏列判断是否需要回滚并找到回滚需要的 undo log,从而实现 MVCC。 一致性:一致性是事务追求的最终目标,由前面提到的原子性、持久性和隔离性实现。
1事务定义 事务:一个最小的不可再分的工作单元;一个事务通常对应一个完整的业务,例如银行账户转账业务,该业务就是一个最小的工作单元 一个完整的业务需要一组的DML( insert、update、delete...这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同 2事务特性 一个事务都必须包含四条基本特性,这四条特性一般称为ACID (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...MySQL中的锁从粒度上来说分为表锁、页锁、行锁。 表锁有意向共享锁(IS)、意向排他锁(IX)、自增锁等。...MySQL 里经常说到的 WAL(Write-Ahead Logging) 技术 ,它的关键点就是先写日志,再写磁盘。...更新时,先改内存中的数据页,将更新操作写入redo log日志,此时redo log进入prepare状态,然后通知MySQL Server执行完了,随时可以提交,MySQL Server将更新的SQL
事务的特性(ACID):1、原子性(Atomicity):事务不可分割(一个事务中的所有操作要么全部执行,要么干脆不执行,不会结束在中间某个环节)2、一致性(Consistency):事务执行的前后,数据完整性保持一致...undo.log日志会记录事务执行的sql,当事务需要回滚时,通过反向补偿回滚数据库状态2、一致性:就是事务再执行的前和后数据库的状态都是正常的,表现为没有违反数据完整性,参照完整性和用户自定义完整性等等...mysql的锁有表锁,行锁,间隙锁,好像还有一个锁数据库的,叫全局锁还是什么来着。...当mysql宕机时,如何保证数据不丢失?...mysql的一个update需要经历什么最终持久化到磁盘?
它实际上是从四个方面来阐述MySQL 事务的特点,下面就分别来看MySQL 通过什么方式来实现这些特性。 一、原子性 1....原子性定义 原子性就是指事务的不可分割性,对于一个事务而言,就是要么都执行,要么都不执行。...二、持久性 1.持久性定义 持久性是指事务一旦提交,它对事务的改变是永久性的,哪怕系统发生了故障,也不会改变其提交的结果。持久性是通过 Redo log 来实现的。...三、隔离性 1.隔离性定义 隔离性是指事务内部的操作与其他事务是隔离的,并发过程中的各个事务之间不能互相干扰。对于事务的操作,主要分成两种:读操作与写操作之间的影响、写操作与写操作之间的影响。...主要就是通过MySQL 中的 MVCC 机制来解决。 四、一致性 一致性的定义与实现 一致性的实现就是在前面三个特性实现的基础上而来的,没有前面三个特性的实现,也就达不到最后数据库事务的一致性。
说到数据库事务,想到的就是要么都做修改,要么都不做,或者是 ACID 的概念。其实事务的本质就是锁、并发和重做日志的结合体。...这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔离性...mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from m_test_db.M force index(IDX_USER_ID...1 warning (0.00 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from m_test_db.M...mysql> commit;Query OK, 0 rows affected (0.00 sec) Session A 再查询 id=1 的记录,发现数据已经是最新的数据: mysql>
前几天的MYSQL的事务错误不会滚的问题, 有同学反映没有太明白. 今天就以这个作为一个主题来做, 题目有点颠覆三观. 首先开头要说的是, MYSQL 默认情况下事务没有原子性....roll back only the single statement that was waiting for the lock and encountered the timeout 在高并发的MYSQL...上面那段加粗的字体的英文就是今天这篇文字的重点 become part of the transaction ,也就是说,MYSQL 的ACID , Atom 这一项 破功了....报错 Lock wait timeout exceeded; try restarting transaction session 1 commit; session 2 commit; 根据数据库ACID
前言 最近在面试,有被问到,MySQL的InnoDB引擎是如何实现事务的,又或者说是如何实现ACID这几个特性的,当时没有答好,所以自己总结出来,记录一下。...事务的四大特性ACID 事务的四大特性ACID分别是,A-原子性(Atomicity),C-一致性(Consistency),I-隔离性(Isolation),D-持久性(Durability)。...所以我写的顺序并不是按照ACID来写的,将一致性放到了最后,顺序就变成了,ADIC。...我们都知道MySQL的数据最终是存放在磁盘中的,所以才会有磁盘的容量大小决定数据容量的大小。但是如果对MySQL的操作都是通过读写磁盘来进行的话,那么光是磁盘的I/O就够把效率大大的拉低了。...总结 MySQL事务的ACID,一致性是最终目的。 保证一致性的措施有: A原子性:靠undo log来保证(异常或执行失败后进行回滚)。
写在前面 本文主要探讨MySQL InnoDB 引擎下ACID的实现原理,对于诸如什么是事务,隔离级别的含义等基础知识不做过多阐述。...ACID MySQL 作为一个关系型数据库,以最常见的 InnoDB 引擎来说,是如何保证 ACID 的。 (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。...总结 MySQL 都很熟, ACID 也知道是个啥,但 MySQL 的 ACID 怎么实现的?...参考 MVCC 实现原理 MySQL 中的锁 MySQL 事务中 ACID 实现原理 深入 MySQL 事务 出处:https://llc687.top/131.html
事务定义 事务:一个最小的不可再分的工作单元;一个事务通常对应一个完整的业务,例如银行账户转账业务,该业务就是一个最小的工作单元 一个完整的业务需要一组的DML( insert、update、delete...这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同 2事务特性 一个事务都必须包含四条基本特性,这四条特性一般称为ACID (Atomicity)原子性: 事务是最小的执行单位,不允许分割。...MySQL中的锁从粒度上来说分为表锁、页锁、行锁。 表锁有意向共享锁(IS)、意向排他锁(IX)、自增锁等。...MySQL 里经常说到的 WAL(Write-Ahead Logging) 技术 ,它的关键点就是先写日志,再写磁盘。...更新时,先改内存中的数据页,将更新操作写入redo log日志,此时redo log进入prepare状态,然后通知MySQL Server执行完了,随时可以提交,MySQL Server将更新的SQL
01 — ACID 概述 所谓事务是用户自定义的一个数据库操作序列,这些操作是一个不可分割的单位。我们要知道,事务 和 程序 是两个概念,一般来讲,一个程序中包含多个事务。...如果用户没有显示的定义事务,则由数据库管理系统按默认规定自动划分事务。...02 — ACID 特性 A(Atomicity):原子性 原子性是指事务是一个不可分割的工作单位,事务中操作要么都发生,要么都不发生。...第三小节:隔离性的实现 隔离性是事务ACID特性里最复杂的一个。在SQL标准里定义了四种隔离级别,每一种级别都规定一个事务中的修改,哪些是事务之间可见的,哪些是不可见的。...) 只要彻底理解了隔离级别以及他的实现原理就相当于理解了ACID里的隔离型。
写完 redo log,MySQL 就认为事务提交成功了,数据持久化了(ACID的D),然后在空闲的时候,再把内存的数据刷到磁盘。 如果在内存数据刷到磁盘之前,MySQL 掉电了,怎么办?...文件的大小,默认是 50331648 byte,也就是 48 MB innodb_log_files_in_group:设置 redo log 文件的数量,默认是 2,最大值是 100 我们常说事务具有 ACID...但如果我要追求高性能呢?我要把数据写到内存呢? 所以我们说,innodb 在实现高性能写数据的同时,利用 redo log,实现了事务的持久性。...log 只在使用了 innodb 作为存储引擎的 MySQL 上才有,而 binlog,只要你是 MySQL,就会有。...未完待续 总结一下: redo log: innodb 在实现高性能写数据的同时,利用 redo log,实现了事务 ACID 中的D,持久性 binlog:MySQL 的数据还原、主从复制,都依赖 binlog
实现ACID特性关键原理 InnoDB引擎实现ACID特性的具体方式是通过以下几个关键原理: 原子性(Atomicity) InnoDB使用事务日志(transaction log)来实现原子性。...综上所述:InnoDB引擎通过事务日志、快照、锁和redo log等机制来保证ACID特性的实现。
按照严格的标准,只有同时满足ACID特性才是事务;但是目前各大数据库厂商的实现中,真正满足ACID的事务很少。...例如MySQL的NDB Cluster事务不满足持久性;Oracle默认的事务隔离级别为READ COMMITTED,不满足隔离性;InnoDB默认事务隔离级别是可重复读,完全满足ACID的特性。...因此与其说ACID是事务必须满足的条件,不如说它们是衡量事务的四个维度。...隐式字段 每行记录除了我们自定义的字段外,还有数据库隐式定义的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段 DB_ROW_ID 6byte, 隐含的自增ID(隐藏主键),如果数据表没有主键...过程如下: MySQL支持用户自定义在commit时如何将log buffer中的日志刷log file中。这种控制通过变量 innodb_flush_log_at_trx_commit 的值来决定。
专栏持续更新中:MySQL详解 一、事务概念 InnoDB支持事务,而MyISAM不支持事务 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了...业务都成功,则提交这个事务;如果业务中间出现失败,就回滚1个事务 二、ACID特性 每一个事务必须满足下面的4个特性: 原子性(Atomic):事务是一个不可分割的整体,事务必须具有原子特性。...系统重启后MySQL数据库会根据redo log来重新执行这个事务并写入缓存,然后写入磁盘,来保证数据库的持久性。...由于用户会写很多数据,所以commit不会等着这些数据从缓存全部写到磁盘再返回,因为要经过磁盘I/O,业务上不可能让用户去等那么长时间 MySQL最重要的是日志,不是数据!...事务A插入或删除了年龄为20的记录,并且commit,事务B再次查询年龄为20的人,发现已经不是5个人了,幻读也是在某些业务场景下是可以允许的,不一定非要杜绝 四、事务相关命令 查看MySQL是否自动提交事务
三、高性能的索引策略 3.1、独立的列 索引列不能是表达式的一部分,也不能是函数的参数。...此时可以有两个策略,一个是自定义哈希索引,另一个就是前缀索引。...Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。...因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。...参考: 《高性能 MySQL 第三版》 聚簇索引和非聚簇索引 mysql-覆盖索引 创建高性能的索引
“ 事务是 MySQL 等关系型数据库区别于 NoSQL 的重要方面,是保证数据一致性的重要手段。 本文将首先介绍 MySQL 事务相关的基础概念,然后介绍事务的 ACID 特性,并分析其实现原理。...,只有同时满足 ACID 特性才是事务;但是在各大数据库厂商的实现中,真正满足 ACID 的事务少之又少。...ACID 特性及其实现原理 原子性 定义 原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。...总结 下面总结一下 ACID 特性及其实现原理: 原子性:语句要么全执行,要么全不执行,是事务最核心的特性。事务本身就是以原子性来定义的;实现主要基于 undo log。...参考文献: 《MySQL 技术内幕:InnoDB 存储引擎》 《高性能 MySQL》 《MySQL 运维内参》 https://dev.mysql.com/doc/refman/5.6/en/glossary.html
领取专属 10元无门槛券
手把手带您无忧上云