语句分析
sql分为两种
查询
更新(增加/修改/删除)
查询分析
select * from student where age = 18 and name = “张三”;
执行流程
1.检查该语句是否有权限,如果没有则抛出错误信息
2.查询缓存,如果有则直接返回结果(版本8.0以前)
3.分析器进行词法分析,提取SQL语句关键元素
4.优化器确定执行方案,
根据上述的SQL语句,优化器会确定两种方案:
4.1.先查询满足age为18的所有记录,然后在查询的结果集中再次筛选 name 为张三的结果集.
4.2.先查询满足name为张三的所有记录,然后在查询的结果集中再次筛选age为18的结果集
5. 权限校验,如果有则调用存储引擎接口,返回引擎执行的结果
流程是:
权限校验—》查询缓存–》分析器–》优化器–》权限校验–》执行器–》引擎
更新分析
insert into student values(null,“李四”,20);
执行流程
6. 检查该语句是否有权限,如果没有则抛出错误信息
7. 查询缓存,如果有则直接返回结果.(版本8.0以前)
8. 分析器进行词法分析,提取SQL语句关键元素
9. 优化器确定执行方案.
10. 权限校验,如果有则调用存储引擎接口,存储引擎把数据保存在内存中,同时记录redo log(重做日志)并预提交,然后通知执行器 随时可以提交
11. 执行器接收到通知后记录binlog(归档日志),然后调用存储引擎 提交redo log并返回结果给客户端
流程是:
分析器—》权限校验—》执行器—》引擎—redo log 预提交—》binlog—》redo log 提交
redo log 日志用来支持事务
bin log 日志 用来在MYSQL数据库崩溃后,重洗数据