MySQL今日之八股| 青训营笔记

99 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第16天。

前言

这篇笔记是在上了“MySQL - 深入理解 RDBMS”这节课之后有感而发,原来很多所谓的“八股”就是帮助我们理解原理的东西。因此,这篇笔记作为一个整理课堂内容中我认为在面试中会被问到的东西。

笔记内容

1.事务的四大特性

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。

一致性是指一个事务执行之前和执行之后都必须处于一致性状态。比如a与b账户共有1000块,两人之间转账之后无论成功还是失败,它们的账户总和还是1000。

隔离性。跟隔离级别相关,如read committed,一个事务只能读到已经提交的修改。

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

2.MySQL架构

MySQL主要分为 Server 层和存储引擎层:

  • Server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。
  • 存储引擎:主要负责数据的存储和读取。server层通过api与存储引擎进行通信。
    Server 层基本组件
    连接器:当客户端连接 MySQL 时,server层会对其进行身份认证和权限校验。
    查询缓存:执行查询语句的时候,会先查询缓存,先校验这个 SQL是否执行过,如果有缓存这个SQL,就会直接返回给客户端,如果没有命中,就会执行后续的操作。
    分析器:没有命中缓存的话,SQL语句就会经过分析器,主要分为两步,词法分析和语法分析,先看SQL语句要做什么,再检查SQL语句语法是否正确。
    优化器:优化器对查询进行优化,包括重写查询、决定表的读写顺序以及选择合适的索引等,生成执行计划。
    执行器:首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会根据执行计划去调用引擎的接口,返回结果。

3.查询语句执行流程

查询语句的执行流程如下:权限校验、查询缓存、分析器、优化器、权限校验、执行器、引擎。 举个例子,查询语句如下:

select * from user where id > 1 and name = 'aa';

①首先检查权限,没有权限则返回错误;
②MySQL8.0以前会查询缓存,缓存命中则直接返回,没有则执行下一步;
③词法分析和语法分析。提取表名、查询条件,检查语法是否有错误;
④两种执行方案,先查 id > 1还是name = 'aa',优化器根据自己的优化算法选择执行效率最好的方案;
⑤校验权限,有权限就调用数据库引擎接口,返回引擎的执行结果。

小结

其实也没什么好小结的,这些内容在前几天的阅读打卡里的一篇文章就介绍得很详细了,这些所谓的“八股”,我认为了解了解总是有用处的。

参考文献

青训营资料