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

相关推荐
不会就选b8 小时前
MySQL之视图
数据库·mysql
>no problem<8 小时前
基于cola5.0的基础设施层的多数据库切换方案思路
数据库·spring boot·mybatisplus·cola5.0·数据库迁移适配
OceanBase数据库官方博客8 小时前
OceanBase 赋能央国企:从发电到用电的全链路业务承载
数据库·oceanbase
瀚高PG实验室9 小时前
pgsql-ogr-fdw
数据库·postgresql·瀚高数据库·highgo
IvorySQL9 小时前
PostgreSQL 技术日报 (6月5日)|PG19 Beta1 上线,PGConf.PL 2026开启征稿
数据库·postgresql·区块链
abcy07121310 小时前
pycharm python sqlalchemy mysql增删改查实例csdn
数据库·oracle
无风听海10 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
咋吃都不胖lyh11 小时前
langgraph基础示例
数据库
胖胖胖胖胖虎11 小时前
SQL json_table 行转列方法
sql
网管NO.111 小时前
子查询进阶|EXISTS/IN/ANY/ALL,优化查询效率
数据库·sql