MySQL数据库 (一) MySQL数据库基础,MySQL架构,存储引擎,SQL语句分类

目录

一、数据库基础概念

[区分 mysql 和 mysqld](#区分 mysql 和 mysqld)

​编辑

对数据库的理解

什么是数据库?

数据库的本质

模型图

二、见一见数据库

三、主流数据库

[四、服务器 数据库 表三者之间的关系](#四、服务器 数据库 表三者之间的关系)

数据逻辑存储

五、MySQL架构

六、查看存储引擎

七、SQL语句分类

八、总结


一、数据库基础概念

区分 mysql 和 mysqld

mysql 是我们和数据库对话的"客户端窗口",mysql 是 MySQL 官方提供的命令行客户端工具,它不是数据库本身,只是一个 "中间人"。可以把它理解成一个聊天软件,它的作用是帮我们和数据库服务端建立连接,帮我们把 SQL 指令发过去,再把服务端返回的结果展示给我们。它的核心作用就是让我们能和数据库进行交互。我们输入 mysql -u root -p 并回车,再输入密码,进入 mysql> 提示符界面,就是启动了这个客户端。在这个界面里可以执行 CREATE DATABASE、SELECT、INSERT 等 SQL 语句,这些操作都是通过 mysql 客户端发送给服务端来执行的。它的运行位置是 /usr/bin/mysql,普通用户权限就可以执行,因为它只是一个工具,不需要修改系统底层配置。只要你的服务器上安装了 MySQL,这个客户端程序就会默认存在。

mysqld 是数据库本身的 "服务端本体",mysqld 是 MySQL 的服务端主程序,也就是真正的数据库本体。可以把它理解成一个仓库管理员,它在后台默默运行,监听 3306 端口,接收所有客户端的连接请求,处理 SQL 指令,管理数据文件、索引、缓存,最终把数据结果返回给客户端。它的核心作用就是提供数据库服务。它的运行位置是 /usr/sbin/mysqld,需要 root 权限才能启停和管理,因为它是系统级的后台服务,负责管理磁盘上的数据文件,不能被普通用户随意修改。

连接mysql的登录情况

二者完整的工作流程如下:

当输入 mysql -u root -p 登录数据库时,客户端向服务器的 3306 端口发送连接请求,请求登录 root 用户;后台运行的 mysqld 服务端接收到请求,验证我们输入的密码是否正确;验证通过后,服务端建立连接,客户端显示 mysql> 提示符,我们就可以开始写 SQL;我们执行 SELECT * FROM student;,客户端把这条 SQL 发送给服务端;mysqld 服务端执行 SQL,从磁盘读取数据,再把结果返回给客户端;客户端把结果格式化后展示在我们的屏幕上。简单来说 mysqld 是数据库本身,mysql 是你操作数据库的工具,没有 mysqld 就没有数据库服务,没有 mysql 我们就没法和数据库交互。

  • 什么时候用 mysql?只要我们需要登录数据库、写 SQL、查数据、建库建表,都用 mysql 客户端,命令就是 mysql -u root -p。
  • 什么时候和 mysqld 打交道?当我们需要启停数据库服务、修改数据库配置文件、排查数据库运行故障时,需要操作 mysqld 服务端,比如 systemctl restart mysql 就是重启 mysqld 进程。

对数据库的理解

数据库本身就是一种典型的网络服务

数据库本身就是一种典型的网络服务,它的核心架构就是客户端 - 服务端(C/S)模式:服务端程序(如 MySQL 的 mysqld 进程)在服务器后台运行,监听固定端口(如 3306),负责数据的存储、管理和处理,而客户端(如 mysql 命令行工具、代码中的连接或图形化管理工具)则通过网络协议向服务端发送请求,无论是登录验证、执行 SQL 查询还是获取结果,本质上都是一次完整的网络通信过程。即使客户端和服务端位于同一台机器上,也需要通过本地回环网络 (127.0.0.1) 或本地套接字进行交互,依然属于网络服务的范畴;这种设计让数据库可以支持多用户、跨机器的并发访问,是现代软件系统中数据共享与管理的核心基础服务。

我们平时的每一步操作,本质上都是一次网络交互:

  1. 输入 mysql -u root -p 登录,就是客户端向服务端发送连接请求,验证账号密码,建立网络连接;
  2. 执行 SELECT 查询,就是客户端把 SQL 语句打包,通过网络发给服务端;
  3. 服务端执行 SQL 后,把结果集再通过网络发回给客户端,最后才展示在屏幕上。
  4. 哪怕是 "本地连接",也只是用了本地回环网络(127.0.0.1),本质还是网络通信。

日常开发中,我们几乎都是通过网络端口连接数据库,把它当作网络服务来使用的。

这条命令 netstat -tlnp | grep 3306 是用来查看 MySQL 服务的网络监听状态的,它的核心作用是验证数据库是否作为网络服务正常运行。执行后如果出现类似 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1234/mysqld 的结果,就说明 MySQL 服务正在后台运行,mysqld 进程正在监听本机的 3306 端口,这意味着客户端程序(比如 mysql 命令行工具)可以通过网络连接到数据库服务端。其中,127.0.0.1:3306 表示数据库仅监听本机回环地址,只能被本机上的客户端访问;如果是 0.0.0.0:3306 则表示它监听服务器的所有网络接口,允许来自任何地址的连接请求。如果这条命令没有任何输出,则说明 MySQL 服务没有启动,或者启动失败、端口未正常监听,此时客户端将无法连接数据库。

什么是数据库?

MySQL 本身是一套为我们提供数据存取服务的网络程序,它的核心组成可以分为三个层面来理解:首先,我们常说的 "数据库" 本质上是指存储在磁盘或内存中、按照特定结构组织起来的数据集合,也就是我们将来会在磁盘上创建的、用于存放表和记录的数据库方案;其次,为了能对这些数据进行管理和操作,我们需要一个持续运行的后台服务,也就是 mysqld 进程,它作为数据库服务端,负责监听网络端口、处理客户端请求、维护数据文件和事务一致性,让数据能被安全、高效地读写;最后,我们通过 mysql 命令行客户端或其他工具连接到这个服务,就能发送 SQL 指令,完成对数据的增删改查,而整个交互过程都是基于网络通信实现的。因此,完整的数据库系统并非只是一堆文件,而是由数据集合、服务进程和客户端工具共同组成的网络服务,MySQL 正是这样一套实现了这一模式的软件。

存储数据用文件就可以了,为什么还要弄个数据库呢?

一般的文件确实提供了数据的存储能力,但是文件并没有提供非常好的数据管理能力(用户角度),所以用文件存储数据看似简单直接,但在实际开发中会遇到很多难以解决的问题,而数据库正是为了解决这些痛点而生的。首先,直接用文件保存数据存在明显的安全性隐患,不仅权限控制困难,也容易出现数据泄露或误删的情况;其次,当数据量变大后,文件系统无法提供高效的查询和索引能力,我们要找到特定数据往往需要遍历整个文件,效率极低;同时,海量数据在文件中存储会变得臃肿且难以维护,程序对文件的读写控制也缺乏统一的接口,在多进程或多线程环境下很容易出现数据不一致的问题。为了解决这些问题,数据库被设计出来,它将数据存储在磁盘和内存这种存储介质中,通过专门的服务进程进行管理,提供了权限控制、索引查询、事务处理、并发访问等一系列强大的功能,能更安全、高效地管理数据,因此,掌握数据库的使用和优化能力,也是衡量程序员水平的重要指标之一。

数据库的本质

数据库的本质是一套专门用于数据存储与管理的解决方案。我们用户只需通过 SQL 语句提出数据操作的需求,数据库系统就会自动处理底层的文件读写、索引查询、权限校验和并发控制,最终直接返回我们想要的结果,让我们无需关心数据在磁盘或内存中具体如何存储和组织。

模型图

结合上图,我们可以梳理 MySQL 数据库整套系统的工作逻辑: 整个 MySQL 体系分为三大部分,分别是mysql客户端、mysqld数据库服务进程与磁盘上存储的数据库文件,三者依靠网络与本地 IO 完成数据交互。当我们在mysql客户端中输入 SQL 语句,就相当于向服务端发送一份数据操作需求,这份需求会通过网络传递给服务器内运行的mysqld进程;mysqld作为数据库的核心服务,接收到请求后会自动向磁盘发起查找操作,读取对应的数据库文件里存储的数据内容,在完成数据筛选、校验等内部处理后,再将查到的数据结果回传给自身进程;最后mysqld把整理好的结果通过网络原路返回给mysql客户端,我们就能在客户端界面直观看到想要的数据,全程不需要我们手动操作磁盘文件、管理文件读写逻辑,所有底层存储、检索的复杂工作都由mysqld服务代为处理,这也直观体现出数据库是一套完整的数据存储管理解决方案。

二、见一见数据库

下面我们就使用 mysql 建立一个数据库,再建立一张表结构并插入一些数据,最后再对比mysql在Linux中是如何表现的?

如上图,所以建立数据库本质就是建立Linux下的一个目录

建立表:

在数据库中建表本质就是在Linux下创建对应的文件

插入数据:

上述的工作其实都是mysqld服务帮我们做的

在 Linux 系统中,MySQL 数据库的所有操作最终都会体现在磁盘文件上:创建数据库的本质就是在 /var/lib/mysql/ 目录下新建一个同名的子目录,用来存放这个数据库下的所有表文件;而创建表的过程则是在这个目录下生成对应的 .frm(表结构定义文件)和 .ibd(数据与索引文件),用来记录表的字段结构和实际数据;当我们执行 INSERT 插入数据时,也不是直接修改文件,而是通过 mysqld 服务进程来完成数据写入、索引更新和文件管理的所有底层操作,我们只需要通过 SQL 语句表达需求,最终看到的只是执行结果,所有和磁盘文件打交道的细节都被服务端封装起来了。

三、主流数据库

目前主流的关系型数据库有多种,各自有着明确的定位和适用场景。

  1. SQL Server 是微软推出的产品,是 .NET 生态开发者的常用选择,多用于中大型项目;
  2. Oracle 由甲骨文公司开发,主打企业级市场,适合承载业务逻辑复杂的大型项目,但其高并发场景下的表现通常不如 MySQL;
  3. MySQL 同样归属甲骨文旗下,是目前全球最受欢迎的开源数据库之一,它的优势在于并发性能好、对简单 SQL 处理高效,广泛应用于电商、社交平台和论坛等场景,不过它在处理超复杂业务逻辑时的能力相对有限;
  4. PostgreSQL 起源于加州大学伯克利分校,是一款开源、免费的关系型数据库,支持私用、商用和学术研究场景下的修改与分发,扩展性和功能完整性都很强;
  5. SQLite 是一款轻量级嵌入式数据库,遵循 ACID 特性,以小型 C 库的形式存在,占用资源极低,仅需几百 KB 内存即可运行,广泛用于手机、嵌入式设备等场景;
  6. H2 则是用 Java 开发的嵌入式数据库,本身是一个类库,可直接嵌入 Java 应用中,常用于开发测试或小型项目。在这些数据库中,MySQL 是当下应用最广泛、生态最成熟的主流选择。

四、服务器 数据库 表三者之间的关系

我们可以这样理解服务器、数据库与表三者之间的层级关系:

安装数据库服务器本质上是在机器上部署了一套数据库管理系统程序,也就是 mysqld 服务端进程,它作为数据管理的中枢,可以同时管理多个独立的数据库;在实际开发中,我们通常会为每一个应用创建一个专属的数据库,用来隔离和存放该应用的所有数据;而在每个数据库内部,我们又会根据业务实体的不同,创建多张数据表,用结构化的方式来保存不同类型的数据,比如用户表、订单表、商品表等。从底层存储来看,一个数据库在磁盘上就是一个独立的目录,而目录下的每张表最终都会以 .frm 结构文件和 .ibd 数据文件的形式存在,由 mysqld 服务端统一管理;我们通过 mysql 客户端发送 SQL 指令,就是通过网络与服务端交互,由服务端帮我们完成对这些目录和文件的读写操作,最终实现对数据的增删改查。

数据逻辑存储

关系型数据库中表的逻辑存储结构是以二维表格的形式来组织和管理数据。在一张数据表中,列 (Column) 代表着数据的属性,比如图中的 id、name 和 gender,定义了表中每一条数据包含哪些信息;而行 (Row) 则代表一条完整的数据记录,比如 "张三、男" 就是一行。这种由行和列构成的二维结构,让数据变得清晰有序,也为后续的增删改查操作提供了基础,我们可以通过指定列来查询特定属性,也可以通过筛选条件来获取特定的行。

五、MySQL架构

MySQL 是一款跨平台的关系型数据库,几乎能在所有主流操作系统上运行,尽管不同系统的底层实现存在差异,但 MySQL 保证了各平台上物理体系结构的一致性。它的架构从外到内分为四层,每一层都承担着明确的职责,共同完成数据处理的全流程。

  1. 最外层是客户端连接层,提供了 JDBC、ODBC、PHP、Python 等多种语言的连接接口,同时负责连接池管理、用户认证和安全控制,是所有请求进入 MySQL 的入口。
  2. 第二层是 SQL 服务层,相当于数据库的 "大脑",SQL 语句会在这里经过接口接收、词法语法解析、语义校验、查询优化和缓存处理,最终生成可执行的执行计划。
  3. 第三层是可插拔存储引擎层,这是 MySQL 的核心特色之一,InnoDB、MyISAM 等不同的存储引擎在这里各司其职,它们接收服务层的执行计划,负责与底层文件系统交互,完成数据的增删改查、索引管理和事务处理,不同的引擎针对不同的数据场景做了专门优化。
  4. 最底层是文件系统层,它依托操作系统的文件系统,将数据、日志、索引等信息以文件的形式持久化存储在磁盘上,为上层提供可靠的数据落地保障。

从操作系统的视角来看,前三层都运行在用户态,只有最底层依赖内核态的文件系统;从网络的角度来看,上层三层属于应用层,最底层属于内核支撑部分,而存储引擎的可插拔设计,也让 MySQL 能灵活适配不同的业务需求。

六、查看存储引擎

存储引擎是 MySQL 中负责数据存储、索引构建、更新与查询的底层方法实现,也是 MySQL 插件式架构的核心特色。

我们可以通过 show engines; 命令查看当前数据库支持的所有存储引擎,**其中 InnoDB 是 MySQL 5.5 及以后的默认引擎,它支持事务、行级锁和外键约束,能保证数据的一致性和安全性,是目前业务场景中最主流的选择;**而 MyISAM 是早期 MySQL 的默认引擎,不支持事务和外键,但在只读场景下查询性能较高,不过随着业务对数据可靠性的要求提升,它已逐渐被 InnoDB 替代。除此之外,MySQL 还支持 ARCHIVE、MEMORY、CSV 等多种特殊用途的存储引擎,分别适用于归档存储、临时表、数据导出等场景,这种可插拔的设计让 MySQL 能灵活适配不同的业务需求,用户可以根据表的使用场景选择最合适的存储引擎,甚至在同一数据库中为不同的表配置不同的引擎。

七、SQL语句分类

SQL 语句可以按照功能被清晰地划分为三类,它们各司其职,共同构成了数据库操作的完整体系:

DDL (数据定义语言) 是用来定义和维护数据存储结构的语言,它不直接操作数据本身,而是负责创建、修改或删除数据库、表、索引等对象,核心指令包括 CREATE、DROP 和 ALTER,决定了数据以什么样的结构存在;

DML (数据操纵语言) 则专注于对表中数据的直接操作,它负责数据的增、删、改,核心指令为 INSERT、DELETE 和 UPDATE,而在实际应用中,人们常将负责数据查询的 SELECT 语句从 DML 中单独划分出来,称为 DQL (数据查询语言),它是我们从数据库中获取信息的核心手段;

最后,DCL (数据控制语言) 主要负责数据库的权限管理和事务控制,通过 GRANT、REVOKE 来分配或回收用户权限,通过 COMMIT、ROLLBACK 等指令来管理事务,保障数据的安全与一致性。

八、总结

本文系统介绍了MySQL数据库的核心概念与架构。主要内容包括:1. 区分mysql客户端与mysqld服务端的角色与交互流程;2. 阐述数据库作为网络服务的本质及其存储管理优势;3. 解析服务器-数据库-表的三层逻辑关系;4. 详解MySQL四层架构(连接层、SQL服务层、存储引擎层、文件系统层);5. 介绍主流存储引擎特性与SQL语句分类(DDL、DML、DCL)。通过文件系统与数据库的对比,强调了数据库在数据管理、安全性和查询效率方面的优势。全文以MySQL为例,完整呈现了数据库系统从客户端交互到底层存储的全链路工作原理。

谢谢大家的观看!

相关推荐
jnrjian1 小时前
exp imp 配置不了 sys / as sysdba @PDB 如何进入特别pdb
oracle
baynk2 小时前
深入理解MySQL事务隔离级别:从理论到实战实验
mysql
jason_renyu2 小时前
MySQL横表(直表/宽表)与竖表(键值表)完整实操学习笔记
mysql·mysql学习·横标和竖表·竖表讲解·横标竖表学习
梦想的颜色2 小时前
MySQL 查询性能核武器
运维·服务器·数据结构·数据库·mysql
haven-8523 小时前
mysql索引当中的B+树,聚簇/二级索引,最左匹配,失效场景
数据库·b树·mysql
jason_renyu3 小时前
MySQL数据表设计入门学习文档(基于Flask+Vue3图书馆管理系统·小白专用)
mysql·数据表设计入门学习·mysql数据库表设计学习·新手入门数据表设计
KaiwuDB3 小时前
KWDB SampleDB 上新|用 Agent Skill 跑通数据库示例
数据库
计算机安禾3 小时前
【算法分析与设计】第43篇:空间复杂度类与Savitch定理
java·服务器·网络·数据库·算法
cui_ruicheng4 小时前
MySQL(一):数据库基础与MySQL入门
数据库·sql·mysql