一、Java应用程序在执行SQL语句时,与MySQL服务器进行交互的流程

二、理解几个关键节点
1、MySQL驱动
如果要从应用服务器访问MySQL数据库服务器,必须在应用服务器与MySQL数据库服务器之间建立网络连接。
MySQL驱动会在底层跟数据库服务器建立网络连接,有了这个网络连接,才能从应用服务器发送执行SQL的请求给数据库服务器。
所以对于Java语言开发的系统,MySQL会提供Java版本的MySQL驱动,对于PHP、Python等,MySQL也提供对应语言的MySQL驱动。
2、数据库连接池:维持多个网络请求连接,供应用服务器的多线程并发使用。
Java系统部署在Tomcat中使用多个线程来并发处理接收到的多个请求,如果多个并发线程去抢占一个网络连接去访问数据库,那么效率是非常低下的。
在一个数据库连接池中维持了多个系统与数据库服务器之间的网络连接,让多个线程使用里面的不同的连接去执行SQL语句,执行完成之后,不需要销毁网络连接,而是放回池子里,后续可继续使用。
基于这样一个数据库连接池机制,就可以解决多个线程并发的使用多个数据库连接去执行SQL语句的问题。
3、数据库服务器中的工作线程
应用服务器通过数据库网络连接把要执行的SQL语句发送给MySQL服务器,这个网络连接必须要有一个工作线程去处理。
在工作线程中,监听来自应用服务器得请求,当接收到要执行的SQL语句之后,就会转交给SQL接口。
4、SQL接口
SQL接口怎么执行SQL语句呢?此时的SQL语句还是人能读懂的SQL语法类型,而对于MySQL系统来说,是无法理解这些SQL语句的。
因此SQL接口把这个SQL语句交给查询解析器。
5、查询解析器
负责对SQL语句进行解析,按照既定的SQL语法,对SQL语句进行解析,理解这个SQL语句要干什么事情
6、查询优化器
当查询解析器理解了SQL语句要干什么之后,会通过查询优化器,针对SQL语句生成查询路径,并从中选择一个最优的查询路径,生成一个执行计划。
7、执行器调用存储引擎接口
最后把这个执行计划交给底层的存储引擎去真正的执行。数据存储在内存或磁盘中,存储引擎按照一定的步骤去查询缓存数据、更新磁盘数据、从磁盘查询数据等。
















