这是我参与「第五届青训营」伴学笔记创作活动的第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',优化器根据自己的优化算法选择执行效率最好的方案;
⑤校验权限,有权限就调用数据库引擎接口,返回引擎的执行结果。
小结
其实也没什么好小结的,这些内容在前几天的阅读打卡里的一篇文章就介绍得很详细了,这些所谓的“八股”,我认为了解了解总是有用处的。