更新一条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:为什么更新操作操作需要这么多步骤?主要是为了提高效率的同时还要保证稳定性。

相关推荐
李慕婉学姐4 分钟前
Springboot眼镜店管理系统ferchy1l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
小贺儿开发5 分钟前
Unity3D 智慧城市管理平台
数据库·人工智能·unity·智慧城市·数据可视化
瀚高PG实验室12 分钟前
HighGo Database中的约束条件
数据库·瀚高数据库
常利兵17 分钟前
Spring Boot 3 多数据源整合 Druid:监控页面与控制台 SQL 日志配置实战
android·spring boot·sql
Aloudata17 分钟前
指标中台选型技术实测:Aloudata CAN 如何通过 NoETL 语义层驾驭复杂 SQL 生成
大数据·数据库·sql·数据分析·指标平台
星沙丘秋18 分钟前
传统数仓(T+1)中关于异常任务的监控SQL方案
数据库·sql
TTBIGDATA21 分钟前
【Hue】Ambari开启 Kerberos 后,Hue 使用 Spark SQL出现凭证不统一问题处理
大数据·sql·spark·ambari·kerberos·hue·bigtop
知识分享小能手28 分钟前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 数据表的操作 —语法详解与实战案例(3)
数据库·学习·sqlserver
Cx330❀30 分钟前
深入理解 Linux 基础 IO:从 C 库到系统调用的完整剖析
linux·运维·服务器·c语言·数据库·人工智能·科技
有想法的py工程师31 分钟前
PostgreSQL archive_command 场景下的 postgres 免密 SSH 配置与排查实录
数据库·postgresql·ssh