文章目录
- MYSQL数据库基础
-
- [1. 本文简述](#1. 本文简述)
- [2. 数据库简介](#2. 数据库简介)
-
- [2.1 什么是数据库?](#2.1 什么是数据库?)
- [2.2 为什么要使用数据库?](#2.2 为什么要使用数据库?)
- [2.3 主流数据库一览](#2.3 主流数据库一览)
-
- [2.3.1 关系型数据库 (RDBMS)](#2.3.1 关系型数据库 (RDBMS))
- [2.3.2 非关系型数据库 (NoSQL)](#2.3.2 非关系型数据库 (NoSQL))
- [2.4 到底什么是"关系型"数据库?](#2.4 到底什么是“关系型”数据库?)
- [3. MySQL 安装和配置](#3. MySQL 安装和配置)
-
- [3.1 安装指南](#3.1 安装指南)
- [3.2 `mysqld` 服务端程序](#3.2
mysqld
服务端程序) - [3.3 服务器、数据库、表之间的关系](#3.3 服务器、数据库、表之间的关系)
- [3.4 选项(配置)文件 `my.ini`](#3.4 选项(配置)文件
my.ini
)
- [4. 客户端工具](#4. 客户端工具)
-
- [4.1 `mysql` 命令行客户端](#4.1
mysql
命令行客户端) - [4.2 MySQL Workbench](#4.2 MySQL Workbench)
- [4.3 Navicat (Lite 版)](#4.3 Navicat (Lite 版))
- [4.1 `mysql` 命令行客户端](#4.1
- [5. 客户端与服务器的通讯方式](#5. 客户端与服务器的通讯方式)
-
- [5.1 C/S 架构与 B/S 架构](#5.1 C/S 架构与 B/S 架构)
-
- [5.1.1 C/S 架构](#5.1.1 C/S 架构)
- [5.1.2 B/S 架构](#5.1.2 B/S 架构)
- [6. SQL 简介](#6. SQL 简介)
-
- [6.1 什么是 SQL?](#6.1 什么是 SQL?)
- [6.2 SQL 语言分类](#6.2 SQL 语言分类)
- [7. MySQL 整体架构](#7. MySQL 整体架构)
- [8. 存储引擎 (Storage Engine)](#8. 存储引擎 (Storage Engine))
-
- [8.1 简介](#8.1 简介)
- [8.2 查看支持的存储引擎](#8.2 查看支持的存储引擎)
- [8.3 常用存储引擎对比](#8.3 常用存储引擎对比)
MYSQL数据库基础
本文是基于课件内容和个人学习体会整理而来。如果内容有不足之处,非常欢迎大家一起指正和交流!
在我们学习编程的道路上,有一个概念几乎无法绕开,那就是"数据库"。这篇文章将作为我们学习数据库系列的第一站,希望能帮助大家对数据库有一个清晰的初印象。
1. 本文简述
- 理解核心概念:掌握什么是关系型数据库,以及它在软件开发中扮演的关键角色。
- 熟悉基本工具:了解 MySQL 客户端工具的基本用法和 SQL 语言的分类。
- 初探内部结构:对 MySQL 的整体架构和核心的"存储引擎"有一个初步的认识。
2. 数据库简介
2.1 什么是数据库?
我们可以把数据库想象成一个组织严密、管理科学的"数据仓库"。这项技术诞生于 20 世纪 60 年代末,如今已经发展成为计算机科学与技术领域一个至关重要的分支。
数据库技术的主要使命,是帮助我们解决各种数据处理问题,尤其是那些非数值计算的场景。简单来说,数据处理的核心操作,如存储、查询、修改、排序和统计等,都是数据库的拿手好戏。
2.2 为什么要使用数据库?
我们可能会想,用文件(比如 txt, excel)不也能存数据吗?为什么一定要用数据库这么"重"的工具呢?这是个好问题。使用数据库能为我们带来许多文件存储无法比拟的优势:
- 数据持久化:这是最基本也是最重要的一点。数据存储在数据库中,意味着它们被永久地保存在了硬盘等存储介质上。即使程序关闭或服务器意外重启,我们的宝贵数据也不会丢失。
- 数据结构化:数据库能够以规范、有结构的方式(比如表格)来组织数据,这使得数据管理起来一目了然,查询和使用也变得非常高效。
- 数据完整性:数据库管理系统(DBMS)提供了一系列机制来确保数据的准确性和一致性,防止无效或错误的数据被存入。
- 并发控制:在真实的应用场景中,往往有多个用户或程序在同一时间访问数据。数据库能够优雅地处理这些并发请求,通过复杂的锁定和隔离机制,确保数据不会因为同时修改而出错。
- 安全性:数据安全至关重要。数据库提供了精细的权限控制、数据加密等安全功能,可以保护数据不被未经授权的访问和篡改。
- 可扩展性:随着业务发展,数据量会不断增长。数据库被设计为可扩展的,无论是通过升级服务器硬件(垂直扩展)还是增加更多服务器(水平扩展),都能从容应对。
- 备份和恢复:天有不测风云,数据库提供了强大的备份和恢复机制,让我们可以在数据丢失或损坏时,迅速恢复到某个正常的状态。
- 查询优化:对于复杂的查询请求,数据库内部的"查询优化器"会自动分析并选择最高效的执行路径,大大提升查询速度。
- 事务管理:很多业务操作需要多个步骤才能完成(比如转账),数据库的"事务"功能可以确保这些步骤要么全部成功,要么全部失败回滚,从而保证了操作的原子性和可靠性。
- 多用户支持:数据库天生支持多用户环境,允许多个用户同时连接并操作数据。
2.3 主流数据库一览
了解了数据库的重要性后,我们来看看当今市面上有哪些主流的数据库产品。它们主要分为两大阵营:关系型数据库和非关系型数据库。
2.3.1 关系型数据库 (RDBMS)
这是目前应用最广泛的一类数据库,它们以一种被称为"关系模型"的方式来组织数据。
-
Oracle :来自甲骨文公司的商业数据库产品,功能极其强大,性能卓越,是大型企业和关键业务系统的首选,但价格不菲。
-
MySQL :开源免费,是全世界最受欢迎的数据库之一。它在中小企业和互联网应用(如电商、论坛)中拥有极高的普及率。虽然现在也属于甲骨文公司,但其社区版依然可以免费使用。
-
PostgreSQL :一款同样开源且功能强大的关系型数据库,由加州大学伯克利分校开发。它以其高度的可扩展性和对 SQL 标准的严格遵循而闻名。
-
SQL Server :微软推出的专业级数据库,与 Windows 操作系统及 .NET 开发环境能无缝集成,非常适合中大型项目。
-
SQLite :一款极其轻量级的嵌入式数据库。它的资源占用非常低,常常被用在手机 APP、桌面程序或各种嵌入式设备中。
2.3.2 非关系型数据库 (NoSQL)
随着互联网应用场景的复杂化,非关系型数据库也应运而生,用于解决特定问题。
- Redis:一个非常流行的基于"键值对"的内存数据库。由于数据主要在内存中操作,它的读写速度极快,通常被用作缓存系统。同时,它也支持数据持久化和多种丰富的数据结构。
- MongoDB:一个基于"文档"的 NoSQL 数据库。它以灵活的数据模型、易于扩展、高性能和高可用性等特点,在现代应用开发中占据了一席之地。
小贴士 :想了解各个数据库的流行度排名吗?可以访问 DB-Engines Ranking 网站,这里有最新的数据。
2.4 到底什么是"关系型"数据库?
我们刚刚提到了"关系模型",这听起来可能有点抽象。其实,我们可以把它简单地理解为我们非常熟悉的二维表格模型。
一个关系型数据库,就是由许许多多这样的二维表以及表与表之间的联系所构成的。
- 在表中,每一行代表一条具体的记录(Record)。
- 每一行数据又由一或多个列(Column)组成,每一列代表记录的一个属性(Field)。

3. MySQL 安装和配置
3.1 安装指南
具体的安装的步骤现网络上已有很多成熟的教程,限于篇幅此处不再介绍,请自行查找。
3.2 mysqld
服务端程序
当我们成功安装 MySQL 后,在其安装目录的 bin
文件夹下,可以找到一个名为 mysqld
(Linux) 或 mysqld.exe
(Windows) 的可执行文件。

这个程序就是 MySQL 的"心脏"------服务端程序。运行它,就意味着启动了 MySQL 服务。通常,我们会将它配置成开机自启动的系统服务,这样操作系统一启动,MySQL 服务就会在后台自动运行,随时等待客户端的连接。
在Windows系统中,进入计算机管理界面即可控制MYSQL的服务
3.3 服务器、数据库、表之间的关系
这三者的关系,我们可以用一个形象的比喻来理解:
- 数据库服务器 :就像一栋大楼,这栋大楼就是我们安装在机器上的
mysqld
程序。 - 数据库:大楼里的每一个独立房间,就是一个数据库。通常,我们会为一个应用程序创建一个专属的数据库(房间)。
- 表:房间里的一个个柜子,就是表。我们用这些柜子(表)来分门别类地存放具体的数据。

3.4 选项(配置)文件 my.ini
MySQL 安装后,它的所有默认行为都是由一个配置文件控制的。如果我们想修改某些默认设置,比如服务的端口号、数据文件的存放位置、默认的字符编码等,就需要编辑这个文件。
在 Windows 系统中,这个配置文件通常位于 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
。我们可以用任何支持 UTF-8 编码的文本编辑器打开它。
下面是 my.ini
文件的一个内容节选,我们先对它有个大致的了解即可:
ini
#======================================================================
# CLIENT SECTION - 客户端通用配置
#======================================================================
[client]
# 设置所有客户端默认使用的字符集为 utf8mb4,以良好支持 emoji 等特殊字符
default-character-set=utf8mb4
port=3306
#======================================================================
# MYSQL CLIENT SECTION - 仅针对 mysql 命令行客户端的配置
#======================================================================
[mysql]
# 执行操作时,禁止发出"哔"声
no-beep
default-character-set=utf8mb4
#======================================================================
# SERVER SECTION - MySQL 服务器端核心配置
#======================================================================
[mysqld]
# MySQL 服务监听的 TCP/IP 端口号
port=3306
# 数据库文件的根目录路径
# 如果要修改,请确保将原数据目录完整迁移到新路径
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
general_log_file="D:/log/MySQL/8.0/general.log"
# 开启慢查询日志 (记录执行时间超过阈值的查询)
slow-query-log=1
slow_query_log_file="D:/log/MySQL/8.0/slow_query.log"
# 慢查询的时间阈值,单位为秒
long_query_time=10
# 错误日志的存放路径
log-error="D:/log/MySQL/8.0/error_log.err"
# 二进制日志 (binlog) 的文件名前缀,用于数据备份和主从复制
log-bin="D:/log/MySQL/8.0/bin_log"
重要提醒:
- 如果需要重新指定数据目录(
datadir
),请务必将原数据目录(例如C:\ProgramData\MySQL\MySQL Server 8.0\Data
)下的所有文件和文件夹整体复制到新的目标位置(并根据你配置的my.ini文件里的路径-文件名字要统一)。
- 修改完配置文件后,必须重新启动 MySQL 服务才能让新的配置生效。
4. 客户端工具
服务器已经运行起来了,我们该如何与它"对话"呢?这就需要用到客户端工具。
4.1 mysql
命令行客户端
这是 MySQL 安装时自带的一个最基础的命令行工具。虽然界面朴素,但功能强大。使用它非常简单:
首先,确保 MySQL 的 bin
目录已经添加到了系统的 PATH
环境变量中。然后打开终端(命令行提示符或 PowerShell),输入以下命令:
bash
# -u 指定用户名,这里是 root;-p 表示需要输入密码
C:\Users\bit> mysql -u root -p
# 按下回车后,会提示输入密码
Enter 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> # 光标在这里闪烁,等待我们的下一条指令...
4.2 MySQL Workbench
这是 MySQL 官方提供的一款免费的可视化客户端工具,集成了数据库设计、管理、开发等多种功能。


4.3 Navicat (Lite 版)
Navicat 是业内非常流行的一款第三方可视化数据库管理工具,以其直观易用而广受好评。它也推出了免费的 Lite 版本,对于我们日常学习和编写 SQL 来说完全足够了,强烈推荐大家使用吗?
除了对于初学者影响不大的被移除模块,还有一些功能在 Lite 版本中受到了限制:
- 导入和导出: 虽然支持从/向 TXT、CSV、XML 和 JSON 等纯文本格式导入和导出数据,但缺少了对其他数据库格式(如 Access、Excel 等)的支持。
- 查询处理: Lite 版本拥有基本的、带语法高亮的查询编辑器,但缺少了更高级的可视化查询构建器 (Visual Query Builder),该功能允许用户通过拖拽方式生成复杂的 SQL 语句
第一次使用时,需要先创建一个到数据库服务器的连接:
-
新建连接
-
配置连接信息并测试
-
连接成功后,新建查询
5. 客户端与服务器的通讯方式
我们使用的 mysql
命令行、Workbench 或 Navicat,都属于"客户端"。它们与远端的 MySQL 服务进行通信,遵循着经典的客户端/服务器架构模式。
5.1 C/S 架构与 B/S 架构
在软件架构领域,有两种主流的模式:
- C/S 架构:即客户端 / 服务器(Client / Server)架构。
- B/S 架构:即浏览器 / 服务器(Browser / Server)架构。
5.1.1 C/S 架构
这是一种两层架构。用户需要在自己的电脑上安装特定的客户端软件,而服务端程序则运行在服务器上,提供数据或服务。我们使用 Navicat 等工具连接 MySQL,就是典型的 C/S 架构。

常见的 C/S 应用还有 QQ、微信电脑版、各类网络游戏等。
- 优点 :
- 可以充分利用客户端电脑的计算资源,分担服务器压力。
- 响应速度通常更快,用户体验更好。
- 界面和功能可以实现高度的个性化定制。
- 缺点 :
- 需要先安装客户端才能使用。
- 维护和升级成本高,每个客户端都需要更新。
5.1.2 B/S 架构
B/S 架构可以看作是 C/S 架构的一种演进和改进。它将大部分业务逻辑都集中到了服务器端处理,用户端只需要一个通用的浏览器(Browser)即可访问服务。
我们平时访问的各种网站,比如淘宝、Bilibili 等,都属于 B/S 架构。

- 优点 :
- 客户端"零维护",只要有浏览器就能用。
- 业务逻辑集中在服务器,升级和维护非常方便。
- 缺点 :
- 对服务器的压力较大,安全和性能要求高。
- 用户体验受限于浏览器,跨浏览器的兼容性是个需要注意的问题。
6. SQL 简介
6.1 什么是 SQL?
SQL,全称 Structured Query Language,中文译为"结构化查询语言"。它是我们与关系型数据库沟通的标准语言。无论是想存入数据,还是查询、更新、删除数据,都需要通过编写 SQL 语句来完成。
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
(提交事务)。
7. MySQL 整体架构
了解了如何与 MySQL 交互后,我们不妨再深入一点,看看 MySQL 服务器内部大致是如何工作的。
MySQL 8.0 的服务器架构可以看作由多个组件协同工作的系统,主要包括:连接池、SQL 接口、解析器、优化器、缓存、存储引擎等。

一个查询请求的大致流程是:
- 客户端通过连接器与服务器建立连接。
- SQL 语句通过 SQL 接口进入服务器。
- 解析器对 SQL 语句进行词法和语法分析,判断其是否正确。
- 优化器对合法的 SQL 语句生成多种执行计划,并选择成本最低的一个。
- 服务器根据执行计划,调用存储引擎的接口来执行操作,获取数据。
- 最终结果返回给客户端。
8. 存储引擎 (Storage Engine)
8.1 简介
存储引擎是 MySQL 中最核心的底层组件,它像一个可插拔的模块,直接决定了数据是如何在磁盘上被存储、索引、更新和查询的。
MySQL 的一大特色就是支持多种不同的存储引擎。我们可以根据业务场景的具体需求(比如,是读多写少,还是需要事务支持),来为不同的表选择最合适的存储引擎。
8.2 查看支持的存储引擎
我们可以使用 SHOW ENGINES;
语句来查看当前 MySQL 服务器支持的所有存储引擎,以及默认的是哪一个。

从截图中可以看到,InnoDB
是默认的存储引擎,它提供了事务安全、行级锁定和外键等高级功能,是绝大多数应用场景的首选。
8.3 常用存储引擎对比
除了 InnoDB,MySQL 还有其他一些常用的存储引擎,比如 MyISAM, Memory 等。它们各有特点:
特性 | InnoDB | MyISAM | Memory |
---|---|---|---|
事务支持 | 支持 (ACID) | 不支持 | 不支持 |
锁级别 | 行级锁 | 表级锁 | 表级锁 |
外键约束 | 支持 | 不支持 | 不支持 |
崩溃恢复 | 支持 | 不支持 | 不支持 (数据在内存中) |
全文索引 | 支持 (MySQL 5.6+) | 支持 | 不支持 |
数据存储 | 磁盘 | 磁盘 | 内存 |
适用场景 | 需要事务和高并发的场景 | 读密集或全文搜索场景 | 临时表或缓存 |
好了,关于数据库基础的初探就到这里。希望通过这篇文章,大家已经对数据库建立起了一个整体的认知。在接下来的学习中,我们将深入到每一个知识点,动手实践,真正掌握这个强大的工具!