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。

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

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

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

相关推荐
卜锦元2 小时前
Docker Compose 部署 MySQL 8.4 LTS(生产级实践方案)
数据库·mysql·docker·容器
学嵌入式的小杨同学2 小时前
【嵌入式 C 语言高频考点】周测 + 期中真题解析:从基础语法到编程实战
c语言·数据结构·数据库·vscode·算法·面试
_lst_2 小时前
Linux文件系统:EXT系列
数据库
Smile_微笑2 小时前
恢复 MySQL 服务(Docker 环境专用)
mysql·adb·docker
卜锦元2 小时前
Docker Compose 部署 MySQL 5.7(生产级实践方案)
数据库·mysql·adb·docker
PGCCC2 小时前
通知:中国PostgreSQL培训认证 2026年度开班计划
数据库·postgresql
\xin2 小时前
SQL 注入、文件上传绕过、MySQL UDF 提权、SUID 提权、Docker 逃逸,以及 APT 持久化技术渗透测试全流程第二次思路
sql·mysql·docker·容器·渗透测试·json·漏洞
踢足球09293 小时前
寒假打卡:2026-01-23
数据库·sql
冉冰学姐3 小时前
SSM药店管理系统1m48u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·计算机毕业设计·ssm 框架应用·药店管理系统