当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/328572.html

相关文章:

  • 深入理解nginx mp4流媒体模块[上]
  • Go 之 Gin 框架
  • vue3+threejs新手从零开发卡牌游戏(二十一):添加战斗与生命值关联逻辑
  • Linux内核err.h文件分析
  • Qt 富文本处理 (字体颜色大小加粗等)
  • 消息队列的七种经典应用场景
  • uniapp 微信小程序 canvas 手写板文字重复倾斜水印
  • JavaScript如何制作轮播图
  • 【面试经典150 | 动态规划】零钱兑换
  • 什么是防火墙,部署防火墙有什么好处?
  • 学习鸿蒙基础(10)
  • 阿里云对象存储OSS入门
  • [幻灯片]软件需求设计方法学全程实例剖析-03-业务用例图和业务序列图
  • ctfshow-web入门-xxe
  • Docker数据卷挂载
  • QT_day4:对话框
  • 矢量数据库:连接人工智能应用程序的数据复杂性与可用性的桥梁
  • docker:can’t create unix socket /var/run/docker.sock: is a directory
  • Qt 图形视图 /图形视图框架坐标系统的设计理念和使用方法
  • 视频号小店类目资质如何申请?新手看一遍就懂了!
  • 整合SpringSecurity+JWT实现登录认证
  • C# Onnx Yolov9 Detect 物体检测
  • Flink SQL 基于Update流出现空值无法过滤问题
  • git-怎样把连续的多个commit合并成一个?
  • 2024年2月游戏手柄线上电商(京东天猫淘宝)综合热销排行榜
  • Sass5分钟速通基础语法
  • 百度蜘蛛池平台在线发外链-原理以及搭建教程
  • Android_ android使用原生蓝牙协议_连接设备以后,给设备发送指令触发数据传输---Android原生开发工作笔记167
  • 【Java面试题】操作系统
  • SQLite数据库成为内存中数据库(三)