MySQL的SQL执行流程

news/2025/2/19 14:32:55

项目查询数据库的流程

用户通过Tomcat服务器发送请求到MySQL数据库的过程。

  1. 用户发起请求:用户通过浏览器或其他客户端向Tomcat服务器发送HTTP请求。

  2. Tomcat服务器处理请求:

    1. Tomcat服务器接收用户的请求,并创建一个线程来处理这个请求。

    2. 线程从数据库连接池中获取一个数据库连接。

    3. 使用这个连接执行SQL语句(例如查询或更新操作)。

  3. 数据库连接池管理连接:数据库连接池负责管理数据库连接,确保它们被高效地复用和释放。

  4. MySQL数据库处理请求:

    1. MySQL服务器接收来自Tomcat的SQL语句。

    2. SQL解析器解析SQL语句,将其转换为可以执行的操作。

    3. 查询优化器分析查询并选择最佳的执行计划。

    4. 执行器根据优化后的执行计划执行查询。

    5. 存储引擎负责实际的数据存储和检索。

  5. 返回结果:MySQL将查询结果返回给Tomcat服务器,Tomcat再将结果以HTML或其他格式返回给用户。

  6. 数据存储:MySQL使用内存和磁盘来存储数据。内存用于缓存常用数据,提高访问速度;磁盘用于持久化存储所有数据。

更新数据库数据

MySQL InnoDB 存储引擎事务处理流程

  1. 加载缓存数据:从磁盘文件加载数据到Buffer Pool(缓冲池)中。

  2. 写入数据的旧值便于回滚:在更新数据之前,将旧的数据值写入undo日志文件,以便在需要时进行事务回滚。

  3. 更新内存数据:执行器通过InnoDB存储引擎更新内存中的数据。

  4. 写redo日志:将更新后的数据变化记录到Redo Log Buffer(重做日志缓冲区)中。

  5. 准备提交事务 - redo日志刷入磁盘:当事务准备提交时,将Redo Log Buffer中的内容写入redo日志文件。

  6. 准备提交事务 - binlog日志写入磁盘:同时,将binlog日志文件的内容写入磁盘,确保事务的持久性。

  7. 写入binlog文件与位置,写入commit标记:最后,将binlog文件的位置信息写入commit标记,表示事务成功提交。

关键点总结

  • Buffer Pool:用于缓存数据页,减少磁盘I/O操作。

  • Redo Log:记录数据修改前后的状态,用于恢复未完成的事务。

  • Undo Log:记录事务开始前的数据状态,用于回滚事务。

  • Binlog:二进制日志,记录SQL语句或行级更改,用于数据恢复和复制。


http://www.niftyadmin.cn/n/5852678.html

相关文章

使用C#元组实现列表分组汇总拼接字段

文章目录 使用C#元组实现列表分组汇总拼接字段代码运行结果 使用C#元组实现列表分组汇总拼接字段 代码 string message string.empty; var tupleList new List<Tuple<string, string, string>>(); tupleList.Add(new Tuple<string, string, string>("…

更高效实用 vscode 的常用设置

VSCode 可以说是文本编辑神器, 不止程序员使用, 普通人用其作为文本编辑工具, 更是效率翻倍. 这里分享博主对于 VSCode 的好用设置, 让 VSCode 如虎添翼 进入设置 首先进入设置界面, 后续都在这里进行配置修改 具体设置 每项配置通过搜索关键字, 来快速定位配置项 自动保存…

Ubuntu 22.04完整安装Xinference及解决依赖报错

注&#xff1a;文中使用的环境为Ubuntu 22.04 LTS CUDA 12.4.1 1、创建conda环境 conda create -n xinference python3.11 -y conda activate xinference2、安装Xinference pip install "xinference[all]"3、解决报错 Pytorch报错 根据Pytorch安装指引进行安装…

面试经典150题——堆

文章目录 1、数组中的第K个最大元素1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、IPO2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、查找和最小的 K 对数字3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、数据流的中位数4.1 题目链接4.2 题目描述4.3 解…

KubeSphere 和 K8s 高可用集群离线部署全攻略

本文首发&#xff1a;运维有术&#xff0c;作者术哥。 今天&#xff0c;我们将一起探索如何在离线环境中部署 K8s v1.30.6 和 KubeSphere v4.1.2 高可用集群。对于离线环境的镜像仓库管理&#xff0c;官方推荐使用 Harbor 作为镜像仓库管理工具&#xff0c;它为企业级用户提供…

深入解析 vLLM:高性能 LLM 服务框架的架构之美(上)

修改内容时间2.4.1处理请求的流程&#xff0c;引用更好的流程图2025.02.11首发2025.02.08 1. vLLM 整体代码架构 1.1 vLLM 的设计目标与特点 vLLM 是一个高性能的大语言模型服务框架。在大语言模型日益普及的今天&#xff0c;如何高效地提供推理服务成为一个重要挑战。传统的…

jenkins服务启动-排错

服务状态为active (exited) 且进程不在 查看/etc/rc.d/init.d/jenkins配置 获取配置参数 [rootfy-jenkins-prod jenkins]# cat /etc/rc.d/init.d/jenkins | grep -v #JENKINS_WAR"/usr/lib/jenkins/jenkins.war" test -r "$JENKINS_WAR" || { echo "…

CTFSHOW-WEB入门-PHP特性109-115

题目&#xff1a;web 109 1. 题目&#xff1a; 2. 解题思路&#xff1a;题目要求获得两个参数&#xff0c;v1 v2&#xff0c;if语句中的意思是要求两个参数都包含字母&#xff0c;条件满足的话&#xff0c;执行 echo new 类名&#xff08;方法&#xff08;&#xff09;&#xf…