数据库基础学习笔记
本篇笔记系统整理了「数据库基础」这一章的全部知识点,从数据库的概念、价值、主流产品,到 MySQL 的安装配置、客户端工具、客户端与服务器的通信架构、SQL 语言分类、MySQL 整体架构与存储引擎,逐一展开说明,并结合实际开发场景做了适当补充。建议先浏览下方目录,按需跳转阅读。
目录
- [1. 本节学习目标](#1. 本节学习目标)
- [2. 数据库简介](#2. 数据库简介)
- [2.1 什么是数据库](#2.1 什么是数据库)
- [2.2 为什么要使用数据库](#2.2 为什么要使用数据库)
- [2.3 主流数据库](#2.3 主流数据库)
- [2.4 什么是关系型数据库](#2.4 什么是关系型数据库)
- [3. MySQL 的安装和配置](#3. MySQL 的安装和配置)
- [3.1 安装 MySQL(Windows 与 Linux)](#3.1 安装 MySQL(Windows 与 Linux))
- [3.2 mysqld 服务端程序](#3.2 mysqld 服务端程序)
- [3.3 数据库服务器、数据库与表之间的关系](#3.3 数据库服务器、数据库与表之间的关系)
- [3.4 选项(配置)文件](#3.4 选项(配置)文件)
- [4. 客户端工具](#4. 客户端工具)
- [4.1 命令行客户端 mysql](#4.1 命令行客户端 mysql)
- [4.2 Workbench](#4.2 Workbench)
- [4.3 Navicat Lite 版](#4.3 Navicat Lite 版)
- [5. 客户端与服务器的通讯方式](#5. 客户端与服务器的通讯方式)
- [5.1 C/S 架构](#5.1 C/S 架构)
- [5.2 B/S 架构](#5.2 B/S 架构)
- [6. SQL 简介](#6. SQL 简介)
- [6.1 什么是 SQL](#6.1 什么是 SQL)
- [6.2 SQL 分类](#6.2 SQL 分类)
- [7. MySQL 架构](#7. MySQL 架构)
- [8. 存储引擎](#8. 存储引擎)
- [8.1 存储引擎简介](#8.1 存储引擎简介)
- [8.2 查看存储引擎](#8.2 查看存储引擎)
- [8.3 常见存储引擎对比](#8.3 常见存储引擎对比)
1. 本节学习目标
学习本章后,应当达到以下目标:
- 掌握关系型数据库的基本概念,理解数据库的作用与价值。
- 掌握在 Windows 和 Linux 系统下安装 MySQL 数据库的方法。
- 了解客户端工具的基本使用方式,以及 SQL 语言的分类。
- 了解 MySQL 的整体架构与可插拔的存储引擎机制。
补充:数据库是后端开发、数据工程、运维乃至算法岗位的必修基础。无论日后使用何种语言(Java、Python、Go、Node.js 等),只要涉及数据的持久化与查询,几乎都会和数据库打交道,因此把基础概念打牢非常重要。
2. 数据库简介
2.1 什么是数据库
数据库(Database,简称 DB)是 20 世纪 60 年代末发展起来的一项重要技术,如今已经成为计算机科学与技术的一个重要分支。
数据库技术主要用来解决数据处理中的非数值计算问题。所谓数据处理,其主要内容包括:
- 数据的存储:把数据长期、可靠地保存下来。
- 数据的查询:按照条件快速找出需要的数据。
- 数据的修改:对已有数据进行更新、维护。
- 数据的排序:按指定字段对数据进行有序排列。
- 数据的统计:进行汇总、计数、求和、求平均等分析运算。
简单来说,数据库就是「按照数据结构来组织、存储和管理数据的仓库」。它不仅仅是把数据堆放起来,更重要的是让这些数据能够被高效地检索、安全地管理、方便地共享。
补充:需要区分两个易混概念------数据库(DB) 是存储数据的仓库本身;数据库管理系统(DBMS,Database Management System) 是建立在操作系统之上、用于创建和管理数据库的系统软件(如 MySQL、Oracle);数据库系统(DBS) 则是由数据库、数据库管理系统、应用系统、数据库管理员和用户共同构成的完整运行体系。日常口语里大家常把 DBMS 直接称为「数据库」,本书也沿用这种习惯用法。
2.2 为什么要使用数据库
相比把数据简单写进文本文件或内存变量,使用数据库管理数据具有如下优势:
- 数据持久化:数据库可以把数据保存在硬盘等存储介质中,即使应用程序关闭或服务器重启,数据也不会丢失。
- 数据结构化:数据库以结构化的方式组织数据,使数据易于管理、查询和维护。
- 数据完整性:数据库管理系统(DBMS)提供了数据完整性约束(如主键、外键、唯一约束、非空约束等),确保数据的准确性和一致性。
- 并发控制:数据库可以处理多个用户或进程同时访问和修改数据,并通过锁机制、事务隔离等手段保证并发场景下数据的一致性。
- 安全性:数据库提供了访问控制、权限管理、数据加密等多种安全机制,保护数据不被未授权访问。
- 可扩展性:随着数据量的增长,数据库可以通过水平扩展(增加节点)或垂直扩展(增强单机配置)来适应不断增长的数据需求。
- 备份和恢复:数据库支持数据的备份与恢复,在数据丢失或损坏时可以还原,保障业务连续性。
- 查询优化:数据库系统内置了高效的查询优化器,能够自动选择最优执行计划,快速执行复杂的查询操作。
- 事务管理:大部分关系型数据库都支持事务,确保一组操作要么全部成功、要么全部失败(原子性),显著提高了操作的可靠性。事务通常满足 ACID 四大特性------原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
- 多用户支持:数据库允许多个用户同时访问和操作数据,天然适合多用户、多任务的并发环境。
补充:可以做一个对比帮助理解------如果用文件来保存数据,每新增一类数据就要重新设计读写逻辑,多人同时修改还容易相互覆盖;而数据库把这些能力(事务、并发、查询语言、权限、备份)统一封装好了,开发者只需专注于业务本身。
2.3 主流数据库
按数据组织方式的不同,主流数据库大致分为关系型数据库 和非关系型数据库 两大类。业界常用 DB-Engines Ranking 来衡量各类数据库的流行度排名,可作为选型参考。
2.3.1 关系型数据库(RDBMS)
- Oracle:甲骨文(Oracle)公司的产品,适合大型项目,是业内公认功能最强大、生态最完善的数据库之一,需要付费授权,常见于金融、电信、政务等对稳定性要求极高的场景。
- MySQL:开源免费,是全球最受欢迎的数据库之一,被甲骨文公司收购,在中小企业中普及率非常高,主要应用于电商、论坛、博客、Web 应用等场景。
- PostgreSQL:由加州大学伯克利分校计算机系开发的关系型数据库,遵循开源协议,可以免费使用、修改和分发。它在复杂查询、地理信息、JSON 处理等方面能力突出,被称为「最先进的开源数据库」。
- SQL Server:微软(Microsoft)推出的一款专业级数据库,与旗下的 Windows 操作系统、.NET 等编程环境配合良好,适用于中大型项目,在企业级(尤其是 Windows 技术栈)环境中应用广泛。
- SQLite:一款轻量级的嵌入式数据库,占用资源非常低,无需独立的服务器进程,常用于嵌入式设备、手机 App、桌面程序、单元测试等场景。
2.3.2 非关系型数据库(NoSQL)
- Redis:流行的基于键值对(Key-Value)的内存数据库,读写速度极快,常用作缓存,支持数据持久化,并支持字符串、列表、集合、有序集合、哈希等多种数据结构。
- MongoDB:基于 NoSQL 的文档型数据库,以类 JSON 的文档(BSON)存储数据,易于扩展,具备高性能与高可用性,支持丰富的查询和聚合操作,适合字段结构不固定的场景。
补充:除上述两类外,常见的 NoSQL 还有面向列存储的 HBase、面向搜索引擎的 Elasticsearch、面向键值的 Memcached 等。需要说明的是,NoSQL 并非要取代关系型数据库,而是对它的补充------「需要复杂事务与强一致」时多用关系型,「需要海量数据、超高并发或灵活结构」时多用非关系型,实际项目中往往二者结合使用。
2.4 什么是关系型数据库
关系型数据库是指采用关系模型 来组织数据的数据库,数据以行和列的形式存储。
- 关系模型可以简单地理解为二维表格模型,而一个关系型数据库就是由二维表以及表与表之间的关系组成的一个数据组织。
- 每个表中的每一条记录称为一行数据(一条记录 / 一个元组)。
- 每一个数据行由一个或多个列(字段 / 属性)组成。
举例来说,「学生表」中每一行代表一个学生,「姓名、学号、年龄、班级」等就是这一行的各个列。当「学生表」和「班级表」通过「班级编号」这样的字段建立关联时,就形成了表与表之间的关系,这正是「关系型」一词的由来。
补充:关系模型由 E.F. Codd 于 1970 年提出。关系型数据库强调数据之间的关联与约束,因此适合需要保证数据一致性和复杂关联查询的业务系统,如订单、账务、库存管理等。
3. MySQL 的安装和配置
3.1 安装 MySQL(Windows 与 Linux)
MySQL 在 Windows 与 Linux 两大平台上都有对应的安装包,安装流程基本一致,主要差异在于路径、服务管理和配置文件位置。
- Windows 安装:通常通过 MySQL Installer 图形化向导完成,一路选择安装类型、配置端口、设置 root 密码、配置 Windows 服务(可勾选开机自启动),按提示完成即可。
- Linux 安装 :可通过包管理器(如
yum/apt)或解压二进制包的方式安装,安装后通过systemctl等命令管理 MySQL 服务。
补充:初学者最常见的「坑」是装完在命令行输入
mysql提示「不是内部或外部命令」。这是因为 MySQL 的bin目录尚未加入系统的PATH环境变量。解决方法是把安装目录下的bin文件夹(如C:\Program Files\MySQL\MySQL Server 8.0\bin)添加到PATH,之后即可在任意目录下直接使用mysql命令。
3.2 mysqld 服务端程序
当 MySQL 安装完成之后,在 bin 目录下会有一个名为 mysqld(Linux)或 mysqld.exe(Windows)的可执行程序。
mysqld可执行程序运行起来之后,MySQL 服务也就随之启动了。- 当把 MySQL 服务配置为开机自启动时,操作系统启动后会自动运行
mysqld可执行程序,从而自动启动 MySQL 服务。
补充:注意区分两个相似的命令------
mysqld中的d代表 daemon(守护进程),指的是 MySQL 的服务器进程 ;而没有d的mysql则是命令行客户端 。平时说「启动 / 停止 MySQL 服务」,本质上就是启动 / 停止mysqld这个进程。在 Windows 上可以用services.msc服务面板或net start mysql/net stop mysql管理服务,在 Linux 上则用systemctl start/stop mysqld。
3.3 数据库服务器、数据库与表之间的关系
理解「数据库服务器---数据库---表」三个概念的层级关系,是后续操作的基础:
- 数据库服务器:指在机器上安装的一个数据库管理系统程序(如一个运行着的 MySQL)。这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 数据库 :用于保存某个应用中实体的数据。为了保存应用中各类实体的数据,一般会在数据库中创建多个表。
- 表:以二维表的形式保存程序中实体的数据,是数据存储和管理的基本单位。
三者的层级关系可概括为:一台数据库服务器可以容纳多个数据库,一个数据库可以包含多个表,一个表由多行多列的数据组成。
补充:用一个类比帮助记忆------把数据库服务器想象成一栋「办公楼」,里面的每一个「数据库」是一间公司办公室,办公室里的每一张「表格」就是存放具体资料的档案柜。一个公司(应用)通常会建立多间办公室、多张档案柜来分类保存数据。
3.4 选项(配置)文件
MySQL 安装成功后,如果想修改默认配置------比如修改端口号、数据目录位置、默认使用的存储引擎、默认字符编码集与排序规则、日志路径等------可以通过编辑选项文件(配置文件) 实现。
初阶阶段我们只讨论在 Windows 系统下如何修改选项文件,Linux 系统中的配置操作会在进阶部分详细介绍。
在 Windows 系统中,选项文件的默认路径为 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini。使用支持 UTF-8 编码的编辑器打开,在相应的配置节点下修改选项的值即可。下面摘选配置文件的关键内容供参考:
配置文件按节点划分,主要包括三大块:
① [client] 客户端统一配置节点(所有随 MySQL 安装的客户端程序共用的配置)
ini
[client]
default-character-set=utf8mb4 # 所有客户端统一使用 utf8mb4 编码
port=3306 # 客户端连接默认端口
② [mysql] 仅针对 mysql 命令行客户端的配置
ini
[mysql]
no-beep # 执行出错时不发出提示音
default-character-set=utf8mb4 # mysql 命令行客户端使用 utf8mb4 编码
③ [mysqld] 服务端(mysqld 进程)配置节点,是配置文件的核心:
ini
[mysqld]
port=3306 # MySQL 服务监听的端口号
datadir=D:/database/MySQL/data8.0 # 数据目录路径(修改时填实际路径)
character-set-server=utf8mb4 # 服务端使用的字符编码集
collation-server=utf8mb4_0900_ai_ci # 服务端使用的排序规则
default-storage-engine=INNODB # 建表时默认使用的存储引擎
log-output=FILE # 通用日志输出方式:输出到文件
general-log=1 # 是否开启通用日志(1 开启 / 0 关闭)
general_log_file="D:/log/MySQL/8.0/general.log" # 通用日志输出路径
slow-query-log=1 # 是否开启慢查询日志(1 开启 / 0 关闭)
slow_query_log_file="D:/log/MySQL/8.0/slow_query.log" # 慢查询日志输出路径
long_query_time=10 # 慢查询阈值(执行超过 10 秒记为慢查询)
log-error="D:/log/MySQL/8.0/error_log.err" # 错误日志输出路径
log-bin="D:/log/MySQL/8.0/bin_log" # 二进制日志(binlog)文件名前缀
几点关键配置说明:
- port=3306:MySQL 服务对外监听的端口,默认为 3306。
- datadir:实际保存数据文件的目录,如果要更换存储位置,此处填写目标路径。
- character-set-server / collation-server :服务端的字符集与排序规则。推荐使用
utf8mb4,它相比旧的utf8能完整存储 emoji 等 4 字节字符。 - default-storage-engine :新建表时默认使用的存储引擎,推荐
INNODB。 - 慢查询日志 :当某条 SQL 执行时间超过
long_query_time阈值时会被记录,是性能调优的重要手段。 - binlog(log-bin) :二进制日志,记录了所有改动数据的操作,主要用于数据备份 和主从复制。
注意事项:
- 如果重新指定了数据目录路径,需要把原目录
C:\ProgramData\MySQL\MySQL Server 8.0\Data中的内容整体复制到目标位置,避免已有数据丢失。 - 修改配置文件之后必须重新启动 MySQL 服务,配置才会生效。
补充:
my.cnf/my.ini中不同节点([client]、[mysql]、[mysqld])的选项只对读取该节点的程序生效,写错节点会导致配置「改了不生效」。排查 MySQL 是否读取了某个配置文件,可以用mysqld --verbose --help或在客户端用mysql --print-defaults查看默认配置来源。
4. 客户端工具
数据库服务器装好后,需要通过客户端工具 来连接它、编写 SQL、查看数据。常见的客户端有三类:命令行工具 mysql、官方图形化工具 Workbench、业界广泛使用的 Navicat。
4.1 命令行客户端 mysql
mysql 是 MySQL 安装后自带的命令行客户端工具,可以在终端输入命令、执行 SQL 语句。它的基本使用非常简单,打开终端并输入连接命令即可:
使用前请检查
PATH环境变量中是否已配置了 MySQLbin目录,否则终端无法识别mysql命令。
bash
# 使用 mysql 客户端连接服务器:-u 指定用户名,-p 表示接下来输入密码
C:\Users\bit> mysql -uroot -p
Enter password: your_password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.39 MySQL Community Server - GPL
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 连接成功后即可编写 SQL 语句(每条语句以分号 ; 结尾)
mysql> SELECT VERSION();
+-----------+
| version() |
+-----------+
| 8.0.39 |
+-----------+
1 row in set (0.00 sec)
mysql> # 在这里可以继续输入后续的数据库操作指令
常用参数与命令:
-u:指定登录用户名(如-uroot)。-p:提示输入密码;若写成-p密码(中间无空格)则可直接登录。-h:指定服务器主机地址,默认localhost。\h或help:查看帮助;\c:清除当前未完成的语句;quit/exit:退出客户端。
补充:SQL 语句通常需要以分号
;(或\g)作为结束标志才会被执行。只敲了回车但没有分号时,客户端会认为语句还没写完并继续等待,这是新手常遇到的「卡住」原因之一。
4.2 Workbench
Workbench(全称 MySQL Workbench)是 MySQL 官方提供的可视化客户端工具,由甲骨文维护,与 MySQL 版本契合度高,支持建库建表、编写执行 SQL、数据建模、导入导出、用户权限管理等功能。对于希望使用官方免费工具的用户,Workbench 是一个稳妥的选择。
4.3 Navicat Lite 版
Navicat 是业内广泛使用的可视化数据库管理工具,操作直观、功能强大。如今官方推出了免费的 Lite 版本,对于学习阶段编写 SQL 语句而言完全够用,推荐使用。
第一次使用时需要先配置数据库连接,步骤如下:
- 新建连接:点击「连接」→「新建连接」。
- 选择连接类型 :在弹出的列表中(MySQL、PostgreSQL、SQL Server、Oracle、SQLite、MariaDB、MongoDB、Redis 等)选择 MySQL。
- 填写连接信息并测试:在配置界面填写以下信息:
| 配置项 | 含义 | 示例 / 默认值 |
|---|---|---|
| 连接名称 | 给这个连接起一个便于识别的名字 | MySQL |
| 主机 | 数据库服务器地址,连接本机时填 localhost |
localhost |
| 端口 | MySQL 服务监听的端口号 | 3306 |
| 用户名 | 登录数据库的用户名 | root |
| 密码 | 对应密码(可勾选「保存密码」) | --- |
- 点击「测试连接」,提示「连接成功」(如显示服务器版本 8.0.39)后,点击「确定」保存连接。
- 双击连接进入后,即可点击「新建查询」开始编写并执行 SQL。
补充:测试连接失败时,可按以下顺序排查:MySQL 服务是否已启动、端口是否正确、用户名密码是否准确、防火墙是否放行。若服务器在远程机器上,还需确认远程访问权限与防火墙端口。
5. 客户端与服务器的通讯方式
客户端与服务器之间的通信,从架构模式上主要分为 C/S 架构 和 B/S 架构两种。
5.1 C/S 架构
C/S 架构全称是客户端 / 服务器(Client / Server) 架构,是常用的两层架构模式。客户端需要安装专门的客户端软件,服务端程序运行在服务器上,对外提供 Socket 服务或数据库服务。
使用客户端连接 MySQL 数据库服务器(如用 Navicat、命令行 mysql 连接数据库)就属于 C/S 架构。
text
客户端(需要安装程序) ── 客户端请求 ──► 服务器(Socket 服务 / 数据库服务)
客户端(需要安装程序) ◄─ 服务器响应 ── 服务器(Socket 服务 / 数据库服务)
C/S 架构常用于相对固定的用户群体中。常见的 C/S 架构应用有 QQ、CCTalk、各种网络游戏等------凡是需要安装客户端并与服务器进行网络通信的,一般都属于此类。
- 优点:
- 大部分业务逻辑可以在客户端完成,充分利用本地的计算机资源。
- 响应速度快。
- 个性化定制能力强。
- 面向相对固定的用户群,对信息安全的控制能力强。
- 缺点:
- 需要安装客户端才能使用。
- 维护成本高:任何一台电脑上的客户端出现问题都需要维护,升级过程繁琐(每台机器都要更新)。
5.2 B/S 架构
B/S 架构全称是浏览器 / 服务器(Browser / Server) 结构,分为 Web 浏览器、服务器程序、数据库服务三部分,可以理解为对 C/S 架构的一种改进。由于所有业务逻辑都由服务器程序处理,客户端只需使用浏览器就能完成所有操作,从而大大降低了客户端的维护成本。
text
客户端(浏览器) ── HTTP 请求 ──► 服务器程序 ── 数据库操作请求 ──► 数据库
客户端(浏览器) ◄─ HTTP 响应 ── 服务器程序 ◄─ 数据库操作响应 ◄── 数据库
B/S 架构常用于面向公开用户提供的网络服务,比如各类大型网站都属于此类。
- 优点:
- 客户端零维护,只需要安装一个浏览器即可。
- 所有业务都集中在服务器端,业务扩展非常方便。
- 维护成本低,只需要维护服务器即可。
- 缺点:
- 服务器的安全与业务处理能力需要投入很大精力和成本。
- 不同浏览器之间的兼容性表现不尽如人意。
补充:两者可对比记忆------C/S 体验好、本地能力强,但每台设备都要装、都要更新,适合用户固定、功能复杂的桌面应用;B/S 免安装、跨平台、易维护,适合用户规模大、访问入口统一的 Web 应用。在数据库场景中,使用数据库客户端工具连接数据库是 C/S,而通过网页后台管理系统操作数据库则属于 B/S。
6. SQL 简介
6.1 什么是 SQL
SQL(Structured Query Language)是结构化查询语言的简称,是一种用于数据库查询和程序设计的语言,主要用来存取数据,以及对关系数据库进行查询、更新和管理。
SQL 是一种声明式语言------使用者只需描述「想要什么数据」,而不必关心「怎么一步步取出来」,具体的执行计划交由数据库优化器完成。SQL 语法简洁、接近自然语言,且在不同关系型数据库之间高度通用,是操作关系型数据库的通用语言。
补充:SQL 由 IBM 在 20 世纪 70 年代提出,后成为国际标准(ISO/ANSI SQL)。需要注意,标准 SQL 是统一的,但各家数据库(MySQL、Oracle、PostgreSQL 等)都在标准之上做了自己的方言扩展(如 MySQL 的
LIMIT、Oracle 的ROWNUM),跨库迁移时需留意这些差异。
6.2 SQL 分类
按用途不同,SQL 通常划分为以下三大类:
| 分类 | 全称 | 作用 | 代表指令 |
|---|---|---|---|
| DDL | Data Definition Language(数据定义语言) | 用来维护存储数据的结构(库、表、列等对象) | CREATE、DROP、ALTER |
| DML | Data Manipulation Language(数据操纵语言) | 用来对数据本身进行增删改查操作 | INSERT、DELETE、UPDATE、SELECT |
| DCL | Data Control Language(数据控制语言) | 主要负责权限管理和事务控制 | GRANT、REVOKE、COMMIT |
分类记忆要点:
- DDL 管「结构」 :建库建表用
CREATE,删除用DROP,修改表结构用ALTER。 - DML 管「数据」 :插入
INSERT、删除DELETE、修改UPDATE、查询SELECT,是日常开发中使用频率最高的部分。 - DCL 管「权限与事务」 :授权
GRANT、收回权限REVOKE、提交事务COMMIT。
补充:在有些教材里还会进一步细分出 TCL(Transaction Control Language,事务控制语言) ,把
COMMIT、ROLLBACK、SAVEPOINT等事务相关指令单列出来。本笔记按课件口径把事务控制归入 DCL 介绍。无论怎样划分,核心都是「结构、数据、权限、事务」这四类操作的语义区分。
7. MySQL 架构
MySQL 8.0 服务器主要由以下组件构成:
- 连接池(Connection Pool):负责管理与客户端建立的连接,处理身份认证与安全校验,支持 TCP/IP、Socket、命名管道等多种连接方式。
- 服务管理工具和公共组件:完成系统的管理、备份、复制、字符集、锁、插件等公共功能。
- NoSQL 接口:为以键值方式直接访问数据(不经 SQL 解析)提供支持。
- SQL 接口:接收用户提交的 SQL 语句,所有通过 SQL 与 MySQL 交互的操作都从这里进入。
- 解析器(Parser) :对 SQL 语句进行语法解析 和词法分析,校验语句是否合法,并生成解析树。
- 优化器(Optimizer) :在多种可行的执行方案中选择代价最低(最高效) 的执行计划,决定索引的使用、表的连接顺序等。
- 缓存:MySQL 8.0 已移除查询缓存(Query Cache),但仍有缓冲池等缓存机制,用于加速数据访问。
- 存储引擎(Storage Engine):真正负责数据的存储与提取的底层模块,采用可插拔设计。
- 文件系统:存储引擎最终把数据落到磁盘文件中。
此外,MySQL 还为各种编程语言提供了一套连接器(Connector),供外部程序访问服务器,如面向 Java 的 Connector/J、面向 Python 的 Connector/Python、面向 C 的 libmysqlclient 等。
整体处理流程可概括为:客户端通过连接器发起请求 → 进入 SQL 接口 → 由解析器解析、优化器优化 → 调用对应的存储引擎完成数据的存取 → 结果返回客户端。
补充:MySQL 区别于许多数据库的一大特色是「Server 层 + 存储引擎层」的分层设计:解析、优化、事务、权限等公共逻辑在 Server 层完成,而数据如何存储由存储引擎层负责,二者通过统一的 API 交互。正因为这种分层,同一个 MySQL 实例里不同的表甚至可以使用不同的存储引擎。
8. 存储引擎
8.1 存储引擎简介
存储引擎是 MySQL 数据库处理数据的核心组件,负责数据「如何存储、如何建立索引、如何更新和查询」的具体实现。不同的存储引擎在这些方面的实现方式各不相同,因此可以针对不同的业务场景选用合适的存储引擎。
MySQL 服务器采用可插拔的存储引擎架构,在服务器运行时可以动态地加载和卸载存储引擎。这意味着开发者可以在「合适的场景用合适的引擎」之间灵活切换,而不必被某一种存储方式绑定。
8.2 查看存储引擎
要查看当前服务器支持哪些存储引擎,可以使用如下语句:
sql
SHOW ENGINES;
执行后会列出所有可用的存储引擎及其是否支持事务、是否支持保存点、是否为默认引擎、说明信息等。在结果中可以看到,InnoDB 被标记为默认的存储引擎。
查看某张表实际使用的存储引擎,可以用:
sql
SHOW TABLE STATUS LIKE '表名';
-- 或在建表语句中显式指定
CREATE TABLE t (...) ENGINE = InnoDB;
8.3 常见存储引擎对比
下表整理了三种最常遇到的存储引擎在关键能力上的对比,可作为选型参考:
| 对比项 | InnoDB | MyISAM | Memory(HEAP) |
|---|---|---|---|
| 事务支持 | 支持(ACID) | 不支持 | 不支持 |
| 行级锁定 | 支持 | 仅表级锁定 | 表级锁定 |
| 外键约束 | 支持 | 不支持 | 不支持 |
| 崩溃后安全恢复 | 支持(通过重做日志) | 不支持 | 数据在内存,重启即丢失 |
| 存储空间占用 | 相对较大 | 相对较小 | 受内存大小限制 |
| 适用场景 | 多数 OLTP、需要事务与并发 | 读多写少、简单查询 | 缓存临时数据、追求极致读写速度 |
说明(对应课件中的 Notes):
- 部分功能是在 Server 层实现的,而非由存储引擎实现(如某些并发与权限相关能力)。
- 压缩的 MyISAM 表仅在使用压缩行格式时才支持,且此类表为只读 。
3~5. 加密功能主要通过 Server 层的加密函数实现;MySQL 5.7 及以后支持静态数据(data-at-rest)加密,NDB 的备份加密与文件系统加密在相应版本中陆续支持。- 全文索引(FULLTEXT) 支持在 MySQL 5.6 及以后提供。
- 空间索引(Geospatial Index) 支持在 MySQL 5.7 及以后提供。
- InnoDB 会为其「自适应哈希索引(Adaptive Hash Index)」特性在内部使用哈希索引。
选型建议:
- 绝大多数场景直接用默认的 InnoDB 即可:它支持事务、行级锁和外键,配合 MVCC(多版本并发控制)能提供高并发下的数据一致性,是 MySQL 自 5.5 起的默认存储引擎。
- MyISAM 访问速度快但不支持事务,仅在读多写少、对事务无要求的旧系统中考虑使用,新项目一般不再推荐。
- Memory 把数据存放在内存中,读写极快但重启即丢失,适合做临时表、缓存中间结果。
小结:本章从「数据库是什么、为什么用、有哪些」出发,走通了 MySQL 的安装、配置文件、客户端工具、C/S 与 B/S 通信架构、SQL 语言分类,最后落到 MySQL 的整体架构与可插拔存储引擎。理解了这些基础,再进入 SQL 语法与实战开发就会事半功倍。