首页 > 数据库 >MySQL的架构以及SQL的执行过程

MySQL的架构以及SQL的执行过程

时间:2024-04-17 09:57:38浏览次数:25  
标签:存储 缓存 架构 Language MySQL 引擎 SQL

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

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

存储引擎:主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5 版本开始就被当做默认存储引擎了。1.2 Server 层基本组件介绍

 

 

 

 

1. 连接器
主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作

2. 查询缓存(MySQL 5.7默认关闭 MySQL 8.0 版本后移除)
主要用来缓存我们所执行的查询结果。如果打开,执行查询语句的时候,会优先查询缓存。但是一个表一旦执行过更新,这个表所有的缓存都会失效。不推荐使用,默认也是关闭的,甚至移除了。

3. 分析器
主要是用来分析 SQL 语句,依次进行词法分析和语法分析
词法分析: 提取关键字,select字段、 from表、 where条件等
语法分析:判断SQL是否符合 MySQL 的语法

4. 优化器
选定索引(如果有多个)和确定多表关联的顺序,选择优化器认为的最优方案来执行,(有时候不一定最优)

5. 执行器
根据优化器给的方案,先校验用户权限(如果没有指定表的权限,就会返回错误信息),然后调用存储引擎的接口,(这里还可能会有一些过滤操作等),返回执行的结果

 

常见的SQL语句执行过程

查询语句(DQL)的执行流程如下:连接器(=> 查询缓存) => 分析器 => 优化器 => 执行器(校验用户指定表的权限) => 引擎

更新语句(DML)的执行流程如下:连接器  => 分析器 => 执行器(校验用户指定表的权限) => 引擎 => redo log(prepare) => binlog => redo log(commit)

 

 

 

SQL(Structured Query Language):一种结构化的用于管理和操作关系型数据库的标准化语言,主要有如下四种 / 五种(4+TCL)

1. DDL(Data Definition Language)数据定义语言
语法固定,用来操作数据库和表
关键字:create、drop、alter等
2. DML (Data Manipulation Language) 数据操作语言
语法固定,用来增删改数据库表中的数据
关键字:insert、delete,、update等
3. DQL(Data Query Language)数据查询语言
语法非常多,用来查询数据库表中的数据
关键字: select、from、where等
4. DCL(Data Control Language) 数据控制语言
用来定义数据库的访问权限和安全级别和创建用户
关键字: GRANT、REVOKE
5. TCL(Transaction Control Language) 事务控制语言
用于控制数据库的事务操作
关键字: begin、commit、rollback等

 

 

 

 

 

参考

SQL语句在MySQL中的执行过程

 

标签:存储,缓存,架构,Language,MySQL,引擎,SQL
From: https://www.cnblogs.com/huainanyin/p/18138208

相关文章

  • MySQL体系结构
    MySQL体系结构连接层客户端连接器连接器负责与客户端建立连接,处理客户端发送的请求,并将结果返回给客户端。连接池连接池用于管理数据库连接,提高数据库的并发处理能力和性能。服务层管理工具管理工具用于监控和管理MySQL服务器,包括配置管理、性能调优、安全管理等功能。S......
  • MySQL触发器
    MySQL触发器触发器是预先定义的一段SQL语句,当在某个表上执行INSERT/UPDATE/DELETE操作之前或之后,会自动执行触发器。创建触发器CREATETRIGGERtrigger_nameAFTER/BEFOREINSERT/UPDATE/DELETEONtable_nameFOREACHROWBEGIN--触发器操作的SQL语句END;查看触发器......
  • MySQL存储过程与函数
    MySQL存储过程与函数存储过程创建、调用、删除创建CREATEPROCEDURE存储过程名(参数列表)BEGIN--SQL语句END;调用CALL存储过程名(参数值);删除DROPPROCEDUREIFEXISTS存储过程名;函数创建、调用、删除创建CREATEFUNCTION函数名(参数列表)RETURNS返......
  • MySQL游标
    MySQL游标创建游标DECLAREcursor_nameCURSORFORselect_statement;使用游标OPEN光标OPENcursor_name;FETCH光标FETCHcursor_nameINTOvar_name[,var_name]...CLOSE光标CLOSEcursor_name;循环获取游标DECLAREemp_reaultcursorforselect*fromemp;D......
  • Mysql低版本中处理row_number()函数的适配问题
    在最近的项目中遇到了mysql8.0版本中row_number()函数在迁移数据库低版本mysql5.0版本无法使用的问题。具体sql如下:1SELECTDATE(a.CRETIFICATE_DATE)ASNAME,COUNT(*)ASCOUNTFROM2(SELECTCERTIFICATE_DATE,ENABLED,CERTIFICATION_STATE,ROW_NUMBER()over(PARTIT......
  • MySQL视图
    MySQL视图创建或修改视图创建视图CREATE[ORREPLACE][ALGORITHM={UNIFINED|MERGE|TEMPLATE}]VIEWview_name[(column_list)]ASselect_statement[WITH[CASCADED|LOCAL]CHECKOPTION]修改视图ALTER[ALGORITHM={UNIFINED|MERGE|TEMPLATE}]VIEWview_n......
  • MyBatis-06-Spring的SqlSession和原始区别
    DefaultSqlSession这个就不说了,SQL执行是调用执行器Executor执行SqlSessionTemplate构造函数,虽然没有立即创建SqlSession传入代理拦截器SqlSessionInterceptor,但是拦截器是一个实例内部类,可以访问到SqlSessionFactory并且SqlSessionTemplate不支持commit、rollback......
  • 控制台连接数据库成功,驱动也导入了没问题,但tomcat的servlet启动会报错。报错信息:java.
    查了很多资料这个报错信息是因为驱动导入不成功,但我确定我已经导入了,因为我在控制台输出了出来。找了很久,发现了这个小问题。原因是我在Eclipse中创建是一个标准的Web工程,它是自带lib文件夹的,然后我自己又自建了一个lib文件夹用来放驱动,结果就像这样报出一个错误!解决方案:......
  • MySQL登录
    MYSQL登录登录MySQL查看MySQL默认密码:安装MySQL的时候,会生成一个随机密码sudogreppassword/var/log/mysqld.log登录MySQL,执行下面的命令,然后输入密码mysql-uroot-p更改root密码方法1使用root用户登录mysql后,输入:setpassword='{password}';需要注意,密码......
  • MySQL的三大日志及事务
    标题其实不太准确,应该是MySQL的binlog,InnoDB的redolog和undolog 事务的四大特征:ACID, 其中原子性(A)、隔离性(I)和持久性(D)是手段, 一致性(C)是目标。Atomicity   原子性 ==》由undolog实现Consistency一致性 ==》最终的目标,由AID共同来保证Isolation   ......