文章目录

  • 一, MySQL基础架构分析
  • 1.1 MySQL基本架构组件概览
  • 1.2 Server层基本组件介绍
  • 二, 结合🌰说一说查询,更新的过程
  • 2.1 查询语句的执行过程
  • 2.2 更新语句的执行流程
  • 三, 凝练总结

一, MySQL基础架构分析

1.1 MySQL基本架构组件概览

组件

大致功能

连接器

身份验证和权限相关(登录时)

查询缓存

执行查询语句时, 会先查询缓存(MySQL 8.0移除)

分析器

没有命中缓存, 经过分析器(词法分析, 语义分析)

优化器

生成SQL语句的最优执行计划

执行器

操作引擎,返回查询结果

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_查询缓存

简单来说, MySQL主要分为Server层和存储引擎层:

  1. Server层: 主要包括连接器, 查询缓存, 分析器, 优化器等. 所有跨存储引擎的功能都在这一层实现,

比如存储过程, 触发器, 视图, 函数等等, 还有一个通用的日志模块-binlog日志模块;

  1. 存储引擎: 主要负责引擎的存储和读取, 采用可以替换的插件式架构, 支持InnoDB, MyISAM, Memory等多个存储引擎.

其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。

1.2 Server层基本组件介绍

  1. 连接器(身份验证和查询权限)

验证用户名和密码是否正确(数据库mysql的user表中进行验证),如果错误返回错误通知(deAcess nied for user ‘root’@‘localhost’(using password:YES)),如果正确,则会去 mysql 的权限表(mysql中的 user、db、columns_priv、Host 表,分别存储的是全局级别、数据库级别、表级别、列级别、配合 db 的数据库级别)查询当前用户的权限

  • 注意: 本次数据库连接不断开的话, 即便是此时修改了权限也不会生效;
  1. 查询缓存(MySQL 8.0后移除)

查询缓存,存储的数据是以键值对的形式进行存储(key是查询语句, value是执行结果),

  • 如果开启了缓存,那么在一条查询sql语句进来时会先判断缓存中是否包含当前的sql语句键值对,如果存在直接将其对应的结果返回,如果不存在再执行后面一系列操作。如果没有开启则直接跳过。
  • 由于查询缓存前后两条查询SQL必须完全一致。, 查询语句中含有一些不确定的值时,则不会缓存, 如果表更改,则使用该表的所有高速缓存查询都变为无效并从缓存中删除, 所以查询缓存非常容易失效;
  1. 分析器(分析SQL是来干嘛的, 词法分析和语法分析)

未命中缓存, 就由分析器对SQL进行分析, 分析SQl语句是来干嘛的
- 第一步: 词法分析(提取关键字)
- 第二步: 语法分析(判断sql是否符合语法), 分析到语法错误,会直接抛给客户端异常:ERROR:You have an error in your SQL syntax.

  1. 优化器(设计最优的SQL执行方案)

优化器的作用是确定最优的执行方案;比如多个索引的时候如何选择索引, 多表关联查询的时如何选择连接顺序等等

  1. 执行器(调用存储引擎接口, 返回执行结果)

MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

  • 开始执行的时候,要先判断一下你对这个表 有没有执行对应操作的权限,如果没有,就会返回没有权限的错误;如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。
  • 如果表没有索引,会从第一行一行一行地读取,根据where后面的条件是否满足,如果有索引则会根据索引的规则去寻找,然后执行生成结果集。

二, 结合🌰说一说查询,更新的过程

2.1 查询语句的执行过程

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_mysql执行插入语句报连接超时错误_02

2.2 更新语句的执行流程

与查询流程不一样的是,更新流程还涉及两个重要的日志模块,redo log(重做日志)binlog (归档日志)

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_MySQL_03

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_mysql执行插入语句报连接超时错误_04

更新语句的具体执行流程

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_查询缓存_05

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_MySQL_06

三, 凝练总结

mysql执行插入语句报连接超时错误 mysql错误已执行sql语句_存储引擎_07