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。

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

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

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

相关推荐
zlwool2 小时前
机械行业ERP与进销存的合规选型边界
数据库·erp
梦想的颜色2 小时前
【AI速览】RAG 向量数据库选型:Milvus、Chroma、Qdrant、PGVector 全维度横向对比
数据库·milvus·chroma·rag·pgvector·向量库·qdrant
小溪学编程3 小时前
向量数据库 Milvus 基础实践:从入门到上手
数据库·milvus
数据最前线3 小时前
雪上加霜,Oracle向蓝色巨人最后的阵地发起挑战
数据库·oracle
于眠牧北3 小时前
Charles配置指定域名抓取和雷电模拟器中抓取APP接口配置
数据库·redis·缓存
stillstream_ink3 小时前
一个缺失的状态校验,让 Mall4j 的订单系统开了 4 个后门
mysql·测试
福娃筱欢3 小时前
57014 canceling statement due to user request(金仓 KingbaseES)
数据库·kingbase·金仓数据库
ClouGence3 小时前
SAP HANA 数据同步遇到长事务,如何兼顾实时性与完整性?
数据库·后端
数据库小学妹4 小时前
数据库管理工具有哪些?2026主流工具分类与选型对照
数据库·数据库管理工具·数据库工具·信创数据库·数据库客户端
bingHHB4 小时前
销售订单同步实战:MES生产领料/补料→金蝶材料出库
数据库·集成测试