一条更新语句完整流程图如下所示:
mysql执行一条sql语句的完整过程,sql语句在mysql中的执行过程
步骤:
一:客户端层
①:mysql的客户端执行sql
update t set name = ‘zhuge666’ where id = 1;
id为1的name原来的值是zhuge。

二:mysql服务器层
②: 进入mysql服务器,由连接器验证账号密码等身份信息,验证通过去查mysql缓存,如果有,直接返回。没有进入分析器。
③:进入mysql的分析器,分析sql语句是否符合mysql规范。
④:进入sql优化器,mysql底层优化sql,比如调换索引列等。
⑤:进入执行器,执行sql。

三:innoDB引擎层
mysql服务层后边连接了很多引擎层,如MyIsam、innoDB等,这里只分析innoDB引擎。

⑥:加载磁盘上id为1的整页数据到 buff pool缓存池中,此时buff pool中的name值为zhuge,为什么加载整页,因为磁盘上存储数据都是整页整页存的。

⑦:把buff pool中的 旧值 zhuge 写入undo日志版本链,方便事务提交失败后回滚,回滚时直接中undo日志版本链中取值即可。

⑧:在buff pool中把新的值 zhuge666 赋给 name,此时只有buff pool中的name属性做了更新,磁盘上的文件还是原来的旧值 zhuge。

⑨:执行器把更新的操作写入内存中Redo Log buffer(Redo日志缓冲区),此时 磁盘上的文件还是原来的旧值 zhuge。

相关文章:

  • 2022-12-23
  • 2021-08-19
  • 2021-12-05
  • 2022-12-23
  • 2021-07-20
  • 2021-06-30
猜你喜欢
  • 2021-05-30
  • 2021-07-08
  • 2021-12-19
  • 2021-06-19
  • 2021-08-19
相关资源
相似解决方案