mysql语句的执行顺序_MySql-sql语句执行流程

MySql内部组件结构

21c19942acf8d8c808f5d6b66d0c05ad.png

Server层

连接器管理连接与权限校验

连接数据库时负责监听数据库端口请求的便是连接器。

连接命令如下所示:

# mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P 3306

连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份,

这个时候用的就是你输入的用户名和密码。

1、如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。

2、如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权

限。

这就意味着,一个用户成功建立连接后,权限会缓存在一个seesion中,此时即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权

限。修改完成后,只有再新建的连接才会使用新的权限设置。用户的权限表在系统表空间的mysql的user表中。

查询缓存一个特别鸡肋的存在,就是把查询结果放在缓存里,下次有同样的sql直接从缓存中取数据,但对缓存数据所关联的表的任何修改都会导致缓存被清空,只有在变化几乎没有的静态表有存在价值,8.0以后的mysql已经移除了查询缓存

语法分析器如果没有命中缓存,那么mysql即将开始分析输入的sql语句,根据sql语句的关键字和语句结构对sql进行拆分,识别出SQL的目的。

词法分析器分成6个主要步骤完成对sql语句的分析

1、词法分析

2、语法分析

3、语义分析

4、构造执行树

5、生成执行计划

6、计划的执行

8502eaa5dce9a87233790e73111a60f7.pngSQL语句的分析分为词法分析与语法分析,mysql的词法分析由MySQLLex[MySQL自己实现的]完成,语法分析由Bison生

成,经过bison语法分析之后,会生成一个这样的语法树

bb10eedf595106d876bb284f143025f5.png

优化器经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处理。

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

如果有多种方案最终的执行结果是相同的,那么优化器会选择一个执行效率更高的方案。

执行器优化过后mysql就已经确定了该sql语句的目的,开始执行过程之前会先进行权限判断,如果权限没有问题则开表执行,否则返回错误信息。

执行过程根据表的存储引擎类型去调用引擎提供的接口,例如innoDB等存储引擎。

store层mysql的store层比较常用的有三种

innoDB,Myisam,memory

bin-log归档mysql的binlog是Server层实现的二进制日志,他会记录我们的cud操作,特点如下:

1、Binlog在Server层实现(引擎共用)

2、Binlog为逻辑日志,记录的是一条语句的原始逻辑

3、Binlog不限大小,追加写入,不会覆盖以前的日志

误删数据/库,可以使用binlog进行归档恢复!

但需要先开启MySQL的binlog功能。

配置my.cnf开启binlog

log‐bin=/usr/local/mysql/data/binlog/mysql‐bin

binlog‐format=ROW

sync‐binlog=1

注意5.7以及更高版本需要配置本项:server‐id=123454(自定义,保证唯一性);

#binlog格式,有3种statement,row,mixed,statement表示存储执行的sql语句,分布式的时候有可能造成数据不一致;row表示存储的是sql执行后最终的数据结果,但会影响效率;mixed是前两种的合体,效率最低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值