MySql笔记1:MySql中一条sql语句时如何执行的

Mysql基础架构

MySql主要分为Server层存储引擎层

  • server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog (所有引擎可以共用)。

  • 存储引擎层:主要负责数据的存储和读取,采用可替换的插件式架构,即可以按需替换MySql的存储引擎。支持InnoDB、MylSAM、Memory等多种存储引擎。其中MySql5.5.5版本以后默认存储引擎为InnoDB,它还有自有的日志模块:redolog日志。
    在这里插入图片描述
    Server层组件:

  • 连接器

     连接器负责和客户端建立连接,获取权限,管理连接等。
    登录命令

mysql -h${主机名或主机IP} -P${端口} -u${用户名} -p ${数据库名};      # 回车之后再输入密码
mysql -h${主机名或主机IP} -P${端口} -u${用户名} -p${密码} ${数据库名};    # 不建议,会显示数据库密码

  连接命令中的mysql是客户端工具,用来跟服务端建立连接。在完成TCP握手后,连接器就要开始使用你输入的用户名来密码来验证你的身份,如果用户名密码正确,连接器会到权限表里查询的所拥有的权限,此连接之后的权限判断都会以来于此时读取到的权限信息,也就是说一个用户在成功建立连接之后,即使管理员修改了该用户的权限,在此次连接中也不会生效,如果新建连接才会生效。
  连接完成后如果没有后续操作,连接处于空闲状态,使用show processlist可以查看。在这里插入图片描述
 Command列为“sleep”,表示空闲连接.
  客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数wait_timeout控制的,默认值是8小时。

  • 查询缓存
      MySql执行过的语句可能会将其以key-value的形式存入缓存中,key是执行的sql语句,value是执行结果。MySql在拿到一个查询请求后会先到缓存中查找,如果能够找到key,那么将直接把key对应的value返回给客户端,如果没有找到,则执行后面的操作,最后,sql执行完成后,执行结果会以key-value的形式存入缓存中。如果查询能够命中缓存,那将不会再进行后续的操作,此时效率还是挺高的。
      但是,MySQL 8.0版本中直接将查询缓存整块功能干掉了,8.0开始就没有这个功能了。因为加入你对一个表做了更新操作,那么这个表上的所有查询缓存都将被清空。对于不经常更新的表,比如系统配置表,使用缓存还是可以的,但是查询缓存失效的场景在实际业务中还是非常频繁的,可能官方也认为该功能的实际应用场景不多,所以删除掉了。

  • 分析器
      如果没有命中缓存,就会往下走,这时就要开始真正执行语句了。首先就是进入分析器,分析器有词法分析语法分析,主要是对sql语句进行解释,让MySql知道这条语句是要做什么。
      词法分析: 一条sql是由多个字符串和空格组成的,MySql需要识别出里面的字符串分别是什么,代表什么,比如一条查询语句,提取关键字select,提取查询的表名、字段名,提取查询条件条件等等。做完这些后,就要进行语法分析。
      语法分析: 语法分析主要是判断主要是来判断这条sql是否正确,是否符合MySql语法,比如select * from 写成selec * from ,MySQL就会抛出“You have an error in your SQL syntax”异常。

  • 优化器
      执行器工作完后,MySql已经知道这条sql是要做什么了,接下来就要执行了,但在开始执行之前,还要经过优化器的处理。
      优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。然后选择一个它认为最优的执行方案去执行。

  • 执行器
      MySql通过分析器知道了一条sql想要做什么,通过优化器知道了应该怎么做,接下来就是真正执行这条语句了。不过在执行前会先验证该用户对这个表有没有相关权限,如果没有,返回错误,如果有,则调用引擎的读写接口,返回接口执行结果。

SQL是怎么执行的

  可以把sql分为两类,一类是读(查询),一类是写(增、删、改)

select * from user a where a.name='pp' and a.password='123';

  以上面语句为例,执行流程:

  • 首先客户端使用TCP与服务端建立连接。
  • 在8.0以前,会先查缓存,如果在缓存中有已该sql语句为key的数据,直接返回结果(value)。
  • 如果没有,分析器开始对上述语句进行词法分析,提取出关键字select,提取出要查询的表user,要查询的表中的所有列,提取where后面的查询条件是name和password,然后进行语法分析,判断语句有没有写错,之后进入优化器
  • 优化器选择它认为的最优方案,该语句可以有两方案

1.先查询用户表中姓名为“pp”的用户,然后查密码是123的用户。
2.先找出密码是123的用户,然后查询姓名是pp的用户。

优化器会选择上述其中一个,开始执行。

  • 最后进行权限验证,执行器调用引擎接口,返回接口执行结果给客户端。

建立连接->查询缓存->分析器->优化器->权限验证->执行器->调用存储引擎接口

update user a set a.password = '321' where a.name = 'pp'; 

  以上面语句为例,执行流程:

  • 首先客户端使用TCP与服务端建立连接,删除表user的索引。
  • 分析器解析sql并判断是否含有语句错误
  • 优化器确定查询方案
  • 执行器调用存储引擎接口查找name='pp’的行返回给server层。
  • 执行器把password改为321,然后调用引擎 API 接口,写入这一行数据,InnoDB 引擎把数据保存在内存中,同时InnoDB 写redo日志,此时 redo日志进入 prepare (准备)状态,然后告诉server层(执行器),执行完成了,随时可以提交。
  • 执行器收到通知后记录binlog,然后调用引擎接口,通知存储引擎
  • 存储引擎提交 redo日志。
  • 最后,更新完成。

建立连接->分析器->优化器->执行器->存储引擎->预提交redolog->记录binlog->提交redolog

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
CSDN是一个技术交流平台,里面有许多关于各种编程语言和数据库的学习资料和笔记。而MySQL是其一种常用的关系型数据库管理系统,也是开放源代码软件之一。 在CSND上,MySQL笔记是指关于MySQL数据库的学习和使用的笔记和教程。这些笔记包含了MySQL数据库的基本概念、安装配置、SQL语句的使用、数据表的设计和管理、索引使用、数据备份和恢复等方面的知识。学习MySQL笔记可以帮助开发者更好地理解和应用MySQL数据库MySQL笔记主要可以分为以下几个方面来介绍和学习: 1. 数据库基础知识:学习数据库的基本概念和原理,了解关系型数据库的特点以及MySQL的特点。 2. 安装和配置:学习如何在不同操作系统上安装和配置MySQL数据库,包括设置用户名、密码和端口等。 3. SQL语句的使用:学习SQL语句的基本语法和常用命令,包括查询、插入、更新、删除等操作。 4. 数据表的设计和管理:学习如何设计和创建数据表,包括选择适当的数据类型、设置主键和外键等。 5. 索引的使用:学习如何创建和使用索引来提高查询效率和数据访问速度。 6. 数据备份和恢复:学习如何进行MySQL数据库的数据备份和恢复,包括全量备份和增量备份等。 通过学习MySQL笔记,开发者可以掌握MySQL数据库的基本操作和高级功能,提高数据管理和查询的效率。此外,还可以了解MySQL数据库的优化技巧和性能调优方法,提升数据库的性能和稳定性。 总之,通过CSDN上的MySQL笔记,开发者可以系统地学习和掌握MySQL数据库的相关知识,从而更好地应用于实际的项目开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值