mysql update语句的执行流程

update tb_student A set A.age='19' where A.name=' 张三 ';

这条 SQL 语句,MySQL 的执行流程可以分为如下几个步骤:

  1. 客户端/服务器通信
  2. 查询解析和预处理
  3. 查询优化器生成执行计划
  4. 开始事务(如果使用事务)
  5. 查询执行
  6. 记录 binlog(事务提交前写入 binlog
  7. 两阶段提交(确保 binlogredo log 一致)
  8. 事务提交
  9. 返回结果

流程说明:

  1. 客户端/服务器通信

    用户在客户端发出 UPDATE tb_student SET age='19' WHERE name='张三'; 语句。

  2. 查询解析和预处理

    MySQL 解析 SQL 语句,并检查表和列是否存在,用户权限是否足够,SQL 语法是否正确。

  3. 查询优化器生成执行计划

    MySQL 优化器生成执行计划,决定如何最快地找到 name='张三' 并更新 age 字段。

  4. 开始事务(如果使用事务)

    当事务开始时,InnoDB 存储引擎会记录 undo log,以备事务回滚使用。这时候数据在内存中更新,但尚未对外生效。

  5. 查询执行

    根据执行计划,MySQL 从表中找到 name='张三' 的记录,并将 age 更新为 19。此时,更新只是在内存中进行,并且修改的旧数据会被写入 undo log

  6. 记录 binlog(在事务提交前)

    这是 binlog 记录的关键步骤。在事务准备提交时,MySQL 会按照以下步骤处理:

    • 生成 binlog 条目 :对于 UPDATE 语句,MySQL 会生成该语句的 binlog 记录。如果使用 row-based 方式记录 binlog,则会记录受影响行的旧值和新值。如果是 statement-based 方式,MySQL 则会记录 SQL 语句本身。
    • 写入 binlog :MySQL 将生成的 binlog 条目写入到二进制日志文件中,但此时事务尚未正式提交,处于准备提交状态。
  7. 两阶段提交

    MySQL 使用两阶段提交来确保 binlog 和存储引擎的 redo log 保持一致,以避免在崩溃恢复时出现数据不一致的问题。两阶段提交过程如下:

    • 第一阶段:写入 binlog :首先,MySQL 会将生成的 binlog 记录持久化到磁盘中。
    • 第二阶段:写入 redo log 并提交事务 :接着,MySQL 将 redo log 写入存储引擎,并提交事务。在 redo logbinlog 都成功写入磁盘后,事务才被认为正式提交。
  8. 事务提交

    MySQL 在完成两阶段提交后,事务会正式提交。事务提交后,内存中的数据修改生效,InnoDB 也会更新数据页,并在适当时候将修改后的数据页写回到磁盘。

  9. 返回结果

    最终,MySQL 向客户端返回成功信息,表示更新操作已成功完成,并且 binlog 中记录了该更新。

binlog 的作用:

  1. 数据恢复 :在崩溃恢复时,binlog 记录的 SQL 操作可以帮助将系统恢复到崩溃前的状态。
  2. 主从复制 :在主从复制场景中,binlog 被用于将主库上的数据修改同步到从库上。
相关推荐
恋喵大鲤鱼3 分钟前
MySQL 某个表字段实现分布式锁
mysql·分布式锁
lifewange4 分钟前
GaussDB /openGauss 与 MySQL、Oracle、PostgreSQL 核心对比表
mysql·oracle·gaussdb
Mike117.8 分钟前
GBase 8a 批处理任务里的事务提交粒度和回滚边界
数据库
小江的记录本9 分钟前
【JEECG Boot】 《JEECG Boot 数据字典使用教程》(完整版)
java·前端·数据库·spring boot·后端·spring·mybatis
yjb.gz10 分钟前
Oracle物化视图概述
数据库·oracle
fundoit10 分钟前
MySQL Workbench中的权限设置不生效
数据库·mysql
ZzzZZzzzZZZzzzz…14 分钟前
MySQL备份还原方法2----LVM
linux·运维·数据库·mysql·备份还原
i220818 Faiz Ul15 分钟前
教育资源共享平台|基于springboot + vue教育资源共享平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·教育资源共享平台
M--Y16 分钟前
Redis常用数据类型-2
数据库·redis
不会写DN18 分钟前
SQL 单表操作全解
java·服务器·开发语言·数据库·sql