MySQL是怎么实现事务的?

MySQL实现事务靠的是4个核心组件:

  • Redo Log

  • Undo Log

  • MVCC

这四个组件分别对应事务的ACID特性的不同方面,一致性是由原子性、隔离性、持久性共同作用实现的。

1.Redo Log保证持久性(D)

在事务提交时,基于WAL(预写日志)机制将修改先写到Redo Log再刷盘写磁盘数据页。

就算写数据页时宕机了,重启后通过重放redo log就能恢复数据,确保已提交的修改不会丢失。

2.Undo Log保证原子性(A)

每次修改数据前,先把原值以逻辑日志的形式存到undo log中。

事务回滚时,按undo log反向操作把数据恢复回去。

要么全做完,要么全撤销,不会出现改了一半的中间状态。

3.锁机制保证隔离性(I)的写-写并发

两个事务同时改同一行,必须一个等另一个释放锁,实现写-写互斥。

InnoDB的锁粒度精确到行级(基于索引实现),还有间隙锁防止幻读。

4.MVCC保证隔离性(I)的读-写并发

读操作不加锁,通过undo log构建的版本链找到自己应该看到的数据版本,主要适配InnoDB默认的可重复读隔离级别RR。

写的时候别人照样能读,读的时候别人照样能写,大幅度提升读写并发度。

一致性不是单独实现的,它是原子性隔离性持久性共同作用的结果。

数据从一个正确状态转移到另一个正确状态,中间不会出现不一致的中间态,同时满足业务的约束规则。

相关推荐
小白男神1 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G1 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远1 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19911 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客1 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安1 天前
MySQL-触发器
数据库·mysql