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

MySQLACID原理!

本文公众号来源:孤独烟 作者:孤独烟 原作者通俗易懂讲解了ACID的一些知识点!我觉得写得非常不错,建议阅读! 引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?"...你:"懂,ACID嘛,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)!"...因此,我们这篇文章着重讨论一下四大特性在Mysql中的实现原理。 正文 我们以从A账户转账50元到B账户为例进行说明一下ACID,四大特性。...因为你定义了一个状态,要求A+B的余额必须不变。 实战解答 问题一:Mysql怎么保证一致性的? OK,这个问题分为两个层面来说。 从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。...总结 本文讲了Mysql中事务ACID四大特性的实现原理,希望大家有所收获。

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

MySQL 是如何实现 ACID 的?

我们都知道,事务具有 ACID 四个特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。...但你知道 MySQL 是通过什么技术手段来实现的吗? ACID 简介 先来简单回顾一下 ACID定义: 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。...MVCC + 锁 使得 MySQL 在 RR 级别避免了幻读问题。...MySQL 中保证一致性主要靠 CR(Crash Recovery)和 DWB(Doublewrite Buffer)来保证的。...比如转账的业务场景,如果说它属于一致性的范畴,也能够说得通,可以叫「用户自定义一致性」;另外,隔离性使得事务之间互不影响的最终效果也是保证了数据的一致。 - 完

1K40

MySQL是如何实现事务ACID的?

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

62010

MySQL事务——ACID四大特性

MySQL事务由一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。...MySQL的存储引擎 存储引擎的概念:在MySQL中的数据用各种不同的技术存储在文件或内存中。...-- 查看mysql支持的存储引擎 show engines; 可以使用以上语句查看MySQL支持的存储引擎。...事务的特点 ACID A(Atomicity)原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。...当读取数据时,MySQL 可以通过隐藏列判断是否需要回滚并找到回滚需要的 undo log,从而实现 MVCC。 一致性:一致性是事务追求的最终目标,由前面提到的原子性、持久性和隔离性实现。

9610

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

它实际上是从四个方面来阐述MySQL 事务的特点,下面就分别来看MySQL 通过什么方式来实现这些特性。 一、原子性 1....原子性定义 原子性就是指事务的不可分割性,对于一个事务而言,就是要么都执行,要么都不执行。...二、持久性 1.持久性定义 持久性是指事务一旦提交,它对事务的改变是永久性的,哪怕系统发生了故障,也不会改变其提交的结果。持久性是通过 Redo log 来实现的。...三、隔离性 1.隔离性定义 隔离性是指事务内部的操作与其他事务是隔离的,并发过程中的各个事务之间不能互相干扰。对于事务的操作,主要分成两种:读操作与写操作之间的影响、写操作与写操作之间的影响。...主要就是通过MySQL 中的 MVCC 机制来解决。 四、一致性 一致性的定义与实现 一致性的实现就是在前面三个特性实现的基础上而来的,没有前面三个特性的实现,也就达不到最后数据库事务的一致性。

18870

MySQL是如何实现事务的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来保证(异常或执行失败后进行回滚)。

1.4K10

Mysql-2-事物特性(ACID)原理

事务的特性(ACID):1、原子性(Atomicity):事务不可分割(一个事务中的所有操作要么全部执行,要么干脆不执行,不会结束在中间某个环节)2、一致性(Consistency):事务执行的前后,数据完整性保持一致...undo.log日志会记录事务执行的sql,当事务需要回滚时,通过反向补偿回滚数据库状态2、一致性:就是事务再执行的前和后数据库的状态都是正常的,表现为没有违反数据完整性,参照完整性和用户自定义完整性等等...mysql的锁有表锁,行锁,间隙锁,好像还有一个锁数据库的,叫全局锁还是什么来着。...当mysql宕机时,如何保证数据不丢失?...mysql的一个update需要经历什么最终持久化到磁盘?

9710

MySQL是如何实现事务ACID的?

事务定义 事务:一个最小的不可再分的工作单元;一个事务通常对应一个完整的业务,例如银行账户转账业务,该业务就是一个最小的工作单元 一个完整的业务需要一组的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

93920

MySQLACID 底层内部实现原理详解

01 — ACID 概述 所谓事务是用户自定义的一个数据库操作序列,这些操作是一个不可分割的单位。我们要知道,事务 和 程序 是两个概念,一般来讲,一个程序中包含多个事务。...如果用户没有显示的定义事务,则由数据库管理系统按默认规定自动划分事务。...02 — ACID 特性 A(Atomicity):原子性 原子性是指事务是一个不可分割的工作单位,事务中操作要么都发生,要么都不发生。...第三小节:隔离性的实现 隔离性是事务ACID特性里最复杂的一个。在SQL标准里定义了四种隔离级别,每一种级别都规定一个事务中的修改,哪些是事务之间可见的,哪些是不可见的。...) 只要彻底理解了隔离级别以及他的实现原理就相当于理解了ACID里的隔离型。

1.1K50

MySQL事务的ACID特性以及并发问题

专栏持续更新中:MySQL详解 一、事务概念 InnoDB支持事务,而MyISAM不支持事务 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了...业务都成功,则提交这个事务;如果业务中间出现失败,就回滚1个事务 二、ACID特性 每一个事务必须满足下面的4个特性: 原子性(Atomic):事务是一个不可分割的整体,事务必须具有原子特性。...系统重启后MySQL数据库会根据redo log来重新执行这个事务并写入缓存,然后写入磁盘,来保证数据库的持久性。...由于用户会写很多数据,所以commit不会等着这些数据从缓存全部写到磁盘再返回,因为要经过磁盘I/O,业务上不可能让用户去等那么长时间 MySQL最重要的是日志,不是数据!...事务A插入或删除了年龄为20的记录,并且commit,事务B再次查询年龄为20的人,发现已经不是5个人了,幻读也是在某些业务场景下是可以允许的,不一定非要杜绝 四、事务相关命令 查看MySQL是否自动提交事务

19830

高性能MySQL(3)——创建高性能索引

三、高性能的索引策略 3.1、独立的列 索引列不能是表达式的一部分,也不能是函数的参数。...此时可以有两个策略,一个是自定义哈希索引,另一个就是前缀索引。...Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。...因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键 更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。...参考: 《高性能 MySQL 第三版》 聚簇索引和非聚簇索引 mysql-覆盖索引 创建高性能的索引

1.3K20

面试题:MySQL事务的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 的值来决定。

25820

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

写完 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

90630

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

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

74130
领券