MySQL的SQL执行流程
项目查询数据库的流程
用户通过Tomcat服务器发送请求到MySQL数据库的过程。
-
用户发起请求:用户通过浏览器或其他客户端向Tomcat服务器发送HTTP请求。
-
Tomcat服务器处理请求:
-
Tomcat服务器接收用户的请求,并创建一个线程来处理这个请求。
-
线程从数据库连接池中获取一个数据库连接。
-
使用这个连接执行SQL语句(例如查询或更新操作)。
-
-
数据库连接池管理连接:数据库连接池负责管理数据库连接,确保它们被高效地复用和释放。
-
MySQL数据库处理请求:
-
MySQL服务器接收来自Tomcat的SQL语句。
-
SQL解析器解析SQL语句,将其转换为可以执行的操作。
-
查询优化器分析查询并选择最佳的执行计划。
-
执行器根据优化后的执行计划执行查询。
-
存储引擎负责实际的数据存储和检索。
-
-
返回结果:MySQL将查询结果返回给Tomcat服务器,Tomcat再将结果以HTML或其他格式返回给用户。
-
数据存储:MySQL使用内存和磁盘来存储数据。内存用于缓存常用数据,提高访问速度;磁盘用于持久化存储所有数据。
更新数据库数据
MySQL InnoDB 存储引擎事务处理流程
-
加载缓存数据:从磁盘文件加载数据到Buffer Pool(缓冲池)中。
-
写入数据的旧值便于回滚:在更新数据之前,将旧的数据值写入undo日志文件,以便在需要时进行事务回滚。
-
更新内存数据:执行器通过InnoDB存储引擎更新内存中的数据。
-
写redo日志:将更新后的数据变化记录到Redo Log Buffer(重做日志缓冲区)中。
-
准备提交事务 - redo日志刷入磁盘:当事务准备提交时,将Redo Log Buffer中的内容写入redo日志文件。
-
准备提交事务 - binlog日志写入磁盘:同时,将binlog日志文件的内容写入磁盘,确保事务的持久性。
-
写入binlog文件与位置,写入commit标记:最后,将binlog文件的位置信息写入commit标记,表示事务成功提交。
关键点总结
-
Buffer Pool:用于缓存数据页,减少磁盘I/O操作。
-
Redo Log:记录数据修改前后的状态,用于恢复未完成的事务。
-
Undo Log:记录事务开始前的数据状态,用于回滚事务。
-
Binlog:二进制日志,记录SQL语句或行级更改,用于数据恢复和复制。