吊打面试官之 MySQL 中一条 SQL 语句的执行过程

本文详细解析了MySQL中一条SQL语句的执行过程,包括连接器、查询缓存、分析器、优化器和执行器等步骤。对于查询语句,重点介绍了查询缓存的失效策略和分析器的角色。而对于更新语句,文章提到了redo log和binlog在事务持久化中的作用,以及两阶段提交的重要性,确保数据的一致性。
摘要由CSDN通过智能技术生成

吊打面试官之 MySQL 中一条 SQL 语句的执行过程

前言

在平常的开发中,可能很多人都是 CRUD,对 SQL 语句的语法很熟练,但是说起一条 SQL 语句在 MySQL 中是怎么执行的却浑然不知,今天我就由浅入深,带大家一点点剖析一条 SQL 语句在 MySQL 中是怎么执行的,吊打面试官。本文主要从两个方面,查询语句和更新语句来解析。

一条 SQL 查询语句如何执行的

比如你执行下面这个 SQL 语句时,我们看到的只是输入一条语句,返回一个结果,却不知道 MySQL 内部的执行过程:

mysql> select * from T where ID=10

在剖析这个语句怎么执行之前,我们先看一下 MySQL 的基本架构示意图,能更清楚的看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。

整体来说,MySQL 可以分为 Server 层和存储引擎两部分。

Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎负责数据的存储和提取,其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。MySQL 5.5.5 之后默认是使用 InnoDB,如果不指定就会使用该存存储引擎,也可以在创建表的时候指定存储引擎或修改存储引擎。

从架构图中可以看出,不同的存储引擎共用一个 Server 层。

连接器

如果要操作 MySQL 数据库,我们必须使用 MySQL 客户端来连接 MySQL 服务器,这时候就是服务器中的连接器来负责根客户端建立连接、获取权限、维持和管理连接,一般的命令如下:

mysql -h$ip -P$port -u$username -p[$password] 

在和服务端完成 TCP 连接后,连接器就要认证身份,用到用户名和密码

  • 如果用户名和密码不对,就会返回错误并结束客户端程序
  • 如果用户名和密码通过,连接器就会到权限表里面查出你拥有的权限,之后连接里面的权限判断逻辑都依赖于此时读到的权限

这说明一个用户成功建立连接后,即使对这个用户的权限做了修改,也不会影响现有的连接的权限,修改完之后只有再新建的连接才会使用新的权限设置。

连接建立之后,没有执行任何语句,这个连接就会处于空闲状态,如果客户端太长时间没动静,连接器就会自动将他断开࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值