概述
本文将从一条简单的单表更新sql出发,探析mysql执行更新sql的底层实现逻辑。
mysql基本架构
上图就是Mysql的逻辑架构图。大体来说,MySQL可以分为Server层和存储引擎层两部分。
Server层 包括连接器、查询缓存、分析器、优化器、执行器等,涵盖mysql绝大多数的核心功能。
存储引擎层 负责数据的存储和提取。mysql支持InnoDB、MyISAM、Memory等多个存储引擎。从mySQL 5.5.5版本开始,InnoDB成为了mysql的默认存储引擎。
mysql更新语句执行流程
假设有如下简单的表T:
现在要将ID=2这一行的值加1:
我们现在就通过这条简单的更新语句来探析mysql更新语句的底层实现逻辑。之前我们在mysql系列之查询语句的底层逻辑 文章中已经介绍了查询语句的基本执行链路。之前查询语句经过的流程,更新语句也会经过。所不同的是:
执行更新操作时,会使这个表的所有查询缓存失效,这也就是不建议使用查询缓存的原因。
更新流程还涉及到两个重要的日志模块:redo log(重做日志) 和 binlong(归档日志)日志。
下面我们就来介绍这两个日志模块。
日志模块:redo log
作用
当有一条记录需要更新时,InnoDB引擎会将记录写到redo log日志中,写的是物理日志,并更新内存,这时候更新操作就完成了。当