本篇将主要讲解 MySql 中的一些基础知识,其中主要包括什么是数据库、mysql 以及 mysqld,然后介绍了数据库的创建;服务器、数据库和表之间的关系;接着介绍了 MySql 的架构,以及 SQL 语句的分类。目录如下:
目录
1. 什么是数据库
2. 数据库的创建
3. 服务器、数据库、表之间的关系
4. MySql 架构
5. SQL 语句分类
1. 什么是数据库
数据库本质来说是一种基于 Client(mysql)、Server(mysqld) 的网络服务,其中 mysql 是数据库服务的客户端,mysqld 是数据库服务的服务器端。如下图:
如上图所示,mysqld 是基于 tcp 协议的一种网络服务,端口号为 3306。但是我们还是需要区分好 mysql、mysqld 以及数据库的的性质:
mysql:一套给我们提供数据存取服务的网络程序(也就是我们直接进行操作的一个前端程序)。
数据库:数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据(在磁盘中存储的一套数据库方案)
mysqld:提供数据库服务服务器(从 mysql 中发来指令,从数据库中拿出数据,然后计算输出)。
如下:
在平时我们所使用的普通文件系统中,并没有提供很好的数据管理功能,仅仅只是提供了数据的存储功能,当我们想要增加删除查找和修改数据的时候会比较麻烦,所以数据库的诞生就很好的解决了这一问题,我们只需要给数据库我们的要求,数据库就可以给我们有关数据的结果。其中,文件保存数据有以下几个缺点:
1. 文件的安全性问题;
2. 文件不利于数据查询和管理;
3. 文件不利于存储海量数据;
4. 文件在程序中控制不方便。
2. 数据库的创建
对于查看数据库中的文件,我们可以使用 show databases 命令查看数据库中对应的数据文件,并且我们的数据库其实是在系统中的一个目录,如下:
当我们打开我们的数据库的时候,我们在 /var/lib/mysql 目录下的文件中也查看到了对应的文件,当我们使用 create database db_name 命令时就是创建数据库文件,如下:
![]()
所以建立数据库,本质就是在 Linux 系统下创建一个目录文件,只不过这些文件并不由程序猿直接操作,而是由数据库服务(mysqld、mysql)帮我们进行操作。
那么我们如何在数据库中存储对应的数据呢?
我们在对应的数据库文件下创建对应的表,然后就可以在表中存储对应的数据,如下所示:
我们先使用 use db_name 中进入到对应的数据库,然后使用创建表的命令创建对应的表。当我们在数据库中创建出对应的表之后,在 Linux 下对应的目录中也出现了对应的文件,所以在数据库中创建表本质就是在 Linux 下创建对应的文件即可。接着我们使用插入命令在数据库的表中插入了一些数据(关于这些命令会在之后的文章中给出详细的用法)。
3. 服务器、数据库、表之间的关系
我们所谓的安装数据库服务器,只是在机器上安装了一个数据管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每个应用创建一个数据库。
为了保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
另外,关于数据库的逻辑存储和物理存储之间的区别:
对于逻辑存储而言,数据库存储数据是使用行列二维形式的表存储数据的,每一次插入都是直接插入一行。
而对于物理存储而言,数据库存储数据就是直接存储的二进制数据。
4. MySql 架构
MySql 是一个可移植的数据库,几乎能在当前所有的操作系统中运行(当然最主流的是在 Linux 下),虽然 MySql 在各种系统底层实现方面各有不同,但是 MySql 基本上能保证在各个平台上的物理体系结构的一致性,如下就是关于 MySql 的架构图(图片来源:一文搞懂MySQL体系架构!!-CSDN博客):
![]()
对于以上图来说,第一层给我们做一些认证的功能,用户登录等等之类的认证,第二层则是对来自 mysql 的语句进行词法语法分析(必要时做一些优化),然后下发给第三层,第三层就是各种各样的存储引擎,可以帮我们访问指定的数据库、指定的文件,对我们的表结构进行增删查改,最底层则是我们的物理存储系统,存储对应的二进制文件。
5. SQL 语句分类
在 MySql 中的命令语句中也有着对应的分类,其中分别位 DDL,DCL,DML,如下:
DDL(data definition language)数据定义语言,用来维护存储数据的结构,也就是创建、销毁和修改存储数据的命令,如:create、drop、alterDML(data manipulation language)数据操纵语言,用来对数据进行操作的语言,也就是对数据进行插入、删除、更新的命令,如:insert、delete、updata
DCL(data control language)数据控制语言,主要负责权限管理和事务代表的指令,如:grant,revoke,commit。