根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。 当我们看到一条语句输入的时候外面一般来说我们只会关注这个结果但是你了解MySQL内部的执行过程吗以上是MySQL逻辑架构图大体上来看MySQL可以分为Server层和存储引擎层两个部分Server层包括连接器查询缓存分析器优化器执行器等覆盖了MySQL大多数核心服务功能以及所有的内置函数而存储引擎负责数据存储和提取。支持InnoDBMyISAMMemory多个存储引擎连接器首先我们需要连接到这个数据库中这个时候就是用到了连接器连接器负责和客户端进行连接获取权限维持和管理连接。查询缓存建立连接完成之后就可以执行select语句了执行逻辑就会来到第二步查询缓存MySQL拿到一个查询请求后先会查询缓存看看是不是之前执行过这个以key-value的形式key是查询语句value是查询结果如果语句不在查询缓存中才会执行后面的阶段但是大多数情况下建议不使用查询缓存因为查询缓存往往弊大于利查询缓存的失效情况非常多只要对一个表更新这个表上的缓存就全部清空。对应更新压力大的数据库来说查询缓存效率十分低除非是一个静态表很长时间才会更新一次在MySQL8.X后就没有这个功能了分析器没有命中缓存后就要开始执行语句了首先MySQL需要知道你做了什么因此需要对SQL语句解析分析器先会做词法解析你输入的是由多个字符串和空格组成的一条SQL语句MySQL需要识别出里面的字符串分别是什么代表什么。MySQL从你输入的select这个关键字识别出来这是一个查询语句。它也要把字符串“T”识别成“表名T”把字符串“ID”识别成“列ID”。做完了这些识别以后就要做“语法分析”。根据词法分析的结果语法分析器会根据语法规则判断你输入的这个SQL语句是否满足MySQL语法。优化器经过了分析器MySQL就知道你要做什么了。在开始执行之前还要先经过优化器的处理。优化器是在表里面有多个索引的时候决定使用哪个索引或者在一个语句有多表关联join的时候决定各个表的连接顺序。执行器MySQL通过分析器知道了你要做什么通过优化器知道了该怎么做于是就进入了执行器阶段开始执行语句。开始执行的时候要先判断一下你对这个表T有没有执行查询的权限如果没有就会返回没有权限的错误如果有权限就打开表继续执行。打开表的时候执行器就会根据表的引擎定义去使用这个引擎提供的接口。