从一条update语句理解MySQL的体系结构原理

一条UPDATE语句在MySQL中的执行流程,可以揭示其体系结构的关键组成部分及其相互作用方式。MySQL的体系结构主要包括客户端、连接器、查询缓存(尽管在MySQL 8.0中已移除)、解析器、优化器、存储引擎层等部分。以下是UPDATE语句执行流程与体系结构的对应解析:

UPDATE语句示例

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;

执行流程与体系结构解析

  1. 客户端与连接器

    • 客户端(如MySQL命令行工具、phpMyAdmin等)发送UPDATE语句到MySQL服务器。
    • 连接器负责身份验证、权限验证,并建立与服务器的连接。
  2. 查询解析与优化

    • 解析器:检查UPDATE语句的语法是否正确,解析SQL语句的各个部分。
    • 预处理器:进一步处理解析后的SQL,如标准化表名、替换视图等。
    • 查询缓存:在MySQL 8.0及以后版本中,查询缓存已被移除,因为对于频繁更新的表,其效果不佳。
    • 优化器:基于表的统计信息选择最优的执行计划,包括决定如何执行JOIN操作、索引的使用等。
  3. 存储引擎层

    • MySQL的更新操作发生在存储引擎层面,最常用的存储引擎是InnoDB。
    • InnoDB事务处理:开始一个新的事务,为UPDATE操作分配事务ID。
    • 锁管理:根据隔离级别(如RR或RC),对受影响的行加锁,防止并发修改冲突。
    • 内存缓冲池(Buffer Pool):从磁盘加载相关数据页到内存中,更新操作在此进行,减少磁盘I/O。
    • Undo Log:记录旧值,以便在事务回滚时恢复数据。
    • Redo Log:记录事务操作的物理变化,确保事务的持久性。即使在数据库崩溃时也能通过redo log恢复数据。
  4. 执行与日志记录

    • 实际更新操作在Buffer Pool中执行,更新后的数据标记为脏页。
    • 更新前,InnoDB引擎会先写入redo log buffer,然后根据 redo log的写策略(如即时写、组提交)将redo log刷盘,确保事务的持久性。
  5. 事务提交

    • 用户执行COMMIT时,InnoDB会完成事务提交流程,包括:
      • 将事务相关信息写入事务系统表,标记事务状态。
      • 根据需要,刷新脏页到磁盘。
      • 清理不再需要的Undo Log记录。
  6. 响应客户端

    • 事务成功提交后,服务器进程向客户端发送确认信息,告知更新影响的行数等。
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值