Mysql是如何为Java服务的

121 阅读2分钟

Java连接Mysql数据库

在日常使用Mysql的过程中一般都如上图,通过发送SQL操作数据库。当然我们真正连接上Mysql还需要一个数据库驱动。(如下)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql-connector.version}</version>
</dependency>

那么大家都知道需要连接上数据库都需要建立一个网络连接,这个连接就是由数据库驱动建立的。有了网络连接我们才可以给数据库发送SQL来操作数据库。

所以对于Java语言而言有Java的数据库驱动,对于其他语言如PHP、C#也有相应的驱动包。当然我们再操作数据库的时候是多个线程同时在发送SQL这个时候就需要数据库连接池。不然要是每次需要执行SQL都去打开一个连接然后使用完成关闭。反过来想一下Mysql数据库也不是接受一个Java服务的连接。我们的Mysql上通常有好多个数据库接受多个应用的连接。

我们的Mysql数据库是如果接受到连接的呀,在数据库服务这面连接一定是一个线程来监听并接受我们发生过来的SQL语句的。这个时候我们的SQL语句会交给Mysql的一个组件"SQL接口"。它是一套执行sql语句的接口专门为我们执行CRUD语句的。

查询解释器

那么现在有一个问题如:select id,name,age from users where id=1 这样的一个sql语句到底应该怎么执行。懂SQL的朋友一眼就能看出来 我们想要查询Users 表中id为1的数据 并只需要id,name,age 这个三个字段的值。那面 查询解释器就是让数据库明白我们想要执行的是什么操作。

查询优化器

还是那个select id,name,age from users where id=1 这个sql 怎么执行更高效呀。1.找到id为1的数据然后在提取 id,name,age这三个字段进行展示。2.扫描全表提取id,name,age这三个字段然后过滤掉非id为1的数据。这就是查询优化器需要做的事找到最高效的查询执行计划。

执行器

根据查询优化器给出的执行方案,执行器会调用存储引擎查询出数据,来满足我们sql所需要检索的数据。大致可以理解为执行器的作用是查询和更新数据。

存储引擎 数据库本身是一个进程,是由程序编写出来的管理数据的系统,和图书管理系统、电信管理系统类似。我们的数据其实存储在内存、磁盘上。我们需要管理这些数据就需要存储引擎。我们mysql 一般使用的是InnoDB存储引擎。