更新一条SQL的执行流程

在 MySQL中,条更新 SQL 语句执行的过程通常包括以下主要步骤:

1.客户端发送请求: 客户端应用程序(如数据库连接器或应用程序)构建一条 UPDATE SQL 语句,并将其发送到 MySOL 服务器端。

2.查询解析和优化: MySQL 服务器接收到请求后,先进行语法解析 ->再经过查询优化器 ->生成执行计划

3.加锁和数据读取: 根据执行计划,MySQL需要对受影响的数据行进行加锁,以确保事务的隔离性和一致性。对于可重复读和读已提交隔离级别,InnoDB 使用 Next-Key Locking(一种行锁机制)来防止幻读。加锁后MySQL 从磁盘或内存中读取需要更新的数据行。

4.Undo Log 记录: 在更新数据之前,InnoDB 会为每一行被修改的数据创建一个 Undo Log 条目,记录原始数据的备份。这用于在事务回滚时能够恢复数据到更新前的状态,

5.数据更新到内存: MySQL 按照 UPDATE 语句指定的条件和新值,修改对应的数据行。更新后的数据首先存储在内存的 Buffer Pool 中。

6.**Redo Log 写入:**修改数据的同时,MySQL 会将更新操作记录到 Redo Log(重做日志)中。Redo Log 包含足够的信息来重新执行更新操作。

7**.Flush 和 Sync**: 当 Redo Log 缓冲区达到一定大小或者经过一定时间后,MySQL 会将 Redo Log 缓冲区的内容刷新到磁盘上(称为 checkpoint),并调用操作系统级别的 fsync()函数同步数据到磁盘,确保 Redo Log的持久性。

8.**事务提交并更新 Redo Log:**当所有更新操作完成并且 Redo Log 已经持久化到磁盘后,MySQL 可以提交事务,并将 Redo Log 的相应部分标记为已提交(commit 状态)。

9.解锁和清理: 提交事务后,MVSQL 会释放对数据行的锁定,允许其他事务访问这些数据。如果没有其他未提交事务依赖于 Undo Log,InnoDB 会在适当的时候清理 Undo Log,释放空间。

10.结果返回: MySQL将更新操作的结果(如受影响的行数)返回给客户端应用程序

PS:为什么更新操作操作需要这么多步骤?主要是为了提高效率的同时还要保证稳定性。

相关推荐
2501_933670795 小时前
2026秋招数据分析岗备考路线:SQL、BI、项目与面试题拆解
数据库
我要见SA姐17 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
xcLeigh8 小时前
聊聊国产化替换:好用数据迁移工具KDMS怎么帮咱们搞定评估难
数据库·sql·数据迁移·kes·kdms
Elastic 中国社区官方博客8 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
我要见SA姐19 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
数据库·ide·vscode·oracle·编辑器
Nturmoils10 小时前
一份 KDMS 评估报告,怎样排出迁移先后顺序
数据库
这个DBA有点耶10 小时前
异构数据集成怎么做?5 种同步方案对比 + 金融级 CDC 实战解析
数据库·oracle·架构
独泪了无痕10 小时前
SQL函数实战:GREATEST与LEAST的技巧
数据库·sql·mysql
麻辣布丁10 小时前
MySQL篇面试题模拟
mysql
码少女11 小时前
Linux--多路转接之select
java·服务器·数据库