jwenjian/ghiblog

MySQL学习笔记一

jwenjian opened this issue · 0 comments

最近在补极客时间的MySQL课程,会从这篇文章开始记录学习笔记

  • MySQL由引擎层和Server层组成

    • 引擎层负责数据的存储和提取

    • Server层提供MySQL的核心功能,主要包括

      • 连接器
      • 查询缓存
      • 分析器
      • 优化器
      • 执行器

      等组成。

  • 连接器负责建立连接,获取权限,维持和管理连接

  • 如果查询语句之前已经执行过,那么查询缓存会命中,直接返回上次的执行结果,但不建议开启查询缓存, 因为如果一旦对一个表的数据进行了更新, 那么这个表上的所有查询缓存都会被清空。对于字典表之类的静态表来说查询缓存才会真正发挥它的功力。但是目前我们的程序也基本上都会有Redis等的缓存中间件。所以也不建议单独为了静态表开启查询缓存。

  • 分析器的工作是,词法分析和语法分析

    • You have an error in your SQL syntax 之类的错误都是在这个阶段抛出来的
  • 优化器用来决定当前语句用哪个索引。

    • 如果你的SQL语句中有错误(或者未知)的列名,优化器就会抛出“Unknown column name”的错误
  • 执行器在执行语句前 会先判断当前用户有没有相关权限 如果没有权限则直接报错返回

    类似的错误信息如下:

      ERROR 1142 (42000): SELECT command denied to user 'b'@'localhost' for table 'T'
    

    执行器通过调用引擎的接口获取想要的数据并返回