
前言
一、为什么需要数据库?文件存储的痛点全解析
二、主流数据库大盘点,MySQL 的适用场景是什么?
2.1 主流数据库特性对比
2.2 MySQL 的核心优势
三、MySQL 基础操作,从安装到数据 CRUD 手把手教
3.1 MySQL 的多平台安装方式
3.2 连接 MySQL 服务器,核心指令解析
指令参数详解
简化连接方式
连接成功的反馈
3.3 MySQL 服务器管理(Windows 平台)
3.4 服务器、数据库、表的层级关系
3.5 MySQL 核心 CRUD 操作,SQL 语句直接运行
3.5.1 数据库操作:创建 & 使用
3.5.2 数据表操作:创建
3.5.3 数据操作:插入 & 查询
3.5.4 拓展操作:删除表 & 删除数据库
四、MySQL 架构设计,看懂底层运行逻辑
4.1 客户端层(Client Connectors)
4.2 MySQL 服务层(MYSQL SERVER)
4.3 存储引擎层(Pluggable Storage Engines)
4.4 文件系统层(File System)
五、SQL 语句大分类,按功能吃透核心指令
5.1 DDL:数据定义语言(Data Definition Language)
5.2 DML:数据操纵语言(Data Manipulation Language)
5.3 DQL:数据查询语言(Data Query Language)
5.4 DCL:数据控制语言(Data Control Language)
六、MySQL 存储引擎,核心特性与查看方式
6.1 存储引擎的核心概念
6.2 查看 MySQL 支持的存储引擎
6.3 主流存储引擎核心对比
总结
作为后端开发、数据开发的必备技能,MySQL 数据库的掌握程度直接决定了程序员的开发效率和项目稳定性。日常开发中用文件存储数据会遇到安全性低、查询困难、海量数据处理乏力等诸多问题,而 MySQL 凭借出色的并发性、轻量性和易用性,成为电商、SNS、论坛等场景的首选数据库。本文将从数据库基础认知出发,一步步讲解 MySQL 的主流应用、安装连接、核心操作、架构设计、SQL 分类和存储引擎,零基础也能轻松上手。下面就让我们正式开始吧!
在接触 MySQL 之前,很多初学者会有一个疑问:用 TXT、Excel 这类文件保存数据就够了,为什么还要专门用数据库? 其实在小体量数据、单人开发的场景下,文件存储看似便捷,但在实际的项目开发中,会暴露诸多致命缺点:
而数据库作为专门为数据管理设计的工具,完美解决了以上问题。它的存储介质主要分为磁盘(持久化存储,保障数据不丢失)和内存(临时存储,提升数据读写速度),能实现数据的安全存储、高效查询、海量管理和便捷的程序对接,也是衡量一个程序员技术水平的重要指标。
市面上的数据库种类繁多,不同的数据库有其专属的设计理念和适用场景,我们先对主流数据库做一个清晰的梳理,帮大家理解 MySQL 的定位和优势:
从上述对比中能看出,MySQL 能成为互联网领域的主流数据库,核心在于这几点:
掌握 MySQL 的基础操作是入门的关键,本节将讲解 MySQL 的安装方式、服务器连接、服务管理,以及最核心的数据库、表、数据的 CRUD 操作,所有操作均提供可直接运行的代码和指令。
MySQL 支持多种操作系统,不同系统的安装方式略有差异,本文整理了企业开发中最常用的几种安装方案,覆盖 Linux(CentOS)和 Windows 平台:
提示:MySQL 8.0 是目前的主流版本,相比 5.7 增加了诸多新特性,如窗口函数、CTE 公用表表达式等,实际开发中可根据项目需求选择版本。
安装完成后,需要通过终端 / 命令行连接 MySQL 服务器,核心 bash 指令如下,这是操作 MySQL 的第一步,必须牢记:
mysql -h 127.0.0.1 -P 3306 -u root -p-h:指定要连接的 MySQL 服务器 IP 地址,127.0.0.1表示本地服务器;-P:指定 MySQL 服务器的端口号,MySQL 默认端口为 3306(注意 P 是大写);-u:指定连接使用的数据库用户名,root是 MySQL 的超级管理员账户,拥有最高权限;-p:表示需要输入密码,输入指令后按回车,会提示Enter password:,此时输入数据库密码即可(密码输入时无明文显示,属于正常现象)。 如果是连接本地的 MySQL 服务器,且使用默认的 3306 端口,可省略-h和-P参数,简化为:
mysql -u root -p输入正确密码后,会出现如下提示,代表连接成功,进入 MySQL 的交互命令行(以 MySQL 5.7 为例):
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-log MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>重要提示:MySQL 的所有 SQL 语句都必须以分号; 或
\g结尾,否则会视为语句未完成,一直等待输入。
在 Windows 平台下,MySQL 以服务的形式运行,可通过图形化界面进行启动、停止、重启等管理操作,步骤如下:
Win+R组合键,打开 “运行” 窗口;services.msc,点击回车,打开 Windows服务管理器;
Linux 平台下可通过
systemctl start mysqld、systemctl stop mysqld、systemctl restart mysqld指令管理 MySQL 服务,后续会单独讲解 Linux 下的数据库运维技巧。
很多新手会混淆服务器、数据库、表的概念,这里用一句话讲清核心关系:安装 MySQL 服务器,本质是在机器上安装了一个数据库管理系统程序,该程序可以管理多个数据库;为了存储应用中不同实体的数据,每个数据库中又可以创建多个表。
简单来说,层级关系为:MySQL 服务器 > 数据库(DB) > 表(Table)。
ecommerce、博客项目的数据库blog;ecommerce数据库中,可创建用户表user、商品表goods、订单表order;
掌握了连接和管理后,接下来就是 MySQL 的核心操作:对数据库、表、数据进行创建、查询、修改、删除,以下所有 SQL 语句均可在 MySQL 交互命令行中直接运行,我们以创建helloworld数据库和student表为例,手把手教学。
1. 创建数据库SQL 语句:创建名为helloworld的数据库
create database helloworld;拓展:为了避免创建已存在的数据库时报错,可添加if not exists判断:
create database if not exists helloworld;2. 使用数据库创建数据库后,必须先使用该数据库,才能在其中创建表、插入数据,SQL 语句:
use helloworld; 执行成功后,会提示Database changed,代表已切换到helloworld数据库。
使用create table语句创建数据表,指定表名和字段(列),以及每个字段的数据类型。示例:创建student学生表,包含id(学号)、name(姓名)、gender(性别)三个字段
create table student(
id int, -- 整型,存储学号
name varchar(32), -- 字符串类型,最大长度32,存储姓名
gender varchar(2) -- 字符串类型,最大长度2,存储性别(男/女)
);字段类型说明:
int是整型,适合存储数字;varchar(n)是可变长度字符串,n表示最大字符数,适合存储姓名、性别、地址等文本信息。
1. 插入数据:
使用insert into语句向表中插入数据,指定字段名和对应的值,SQL 语句支持单条插入和多条插入:
-- 单条插入:插入学号1,姓名张三,性别男
insert into student (id, name, gender) values (1, '张三', '男');
-- 单条插入:插入学号2,姓名李四,性别女
insert into student (id, name, gender) values (2, '李四', '女');
-- 单条插入:插入学号3,姓名王五,性别男
insert into student (id, name, gender) values (3, '王五', '男');
-- 拓展:多条数据一次性插入,效率更高
insert into student (id, name, gender) values
(4, '赵六', '女'),
(5, '孙七', '男'); 执行成功后,会提示Query OK, 1 row affected (0.00 sec)(单条插入)或Query OK, 2 rows affected (0.01 sec)(多条插入),代表数据插入成功。
2. 查询数据:
使用select语句查询表中的数据,这是实际开发中使用频率最高的 SQL 语句,基础查询语法如下:
-- 查询student表中的所有字段、所有数据
select * from student; 其中*表示查询所有字段,执行后会显示表中的所有数据,结果如下:
+----+--------+--------+
| id | name | gender |
+----+--------+--------+
| 1 | 张三 | 男 |
| 2 | 李四 | 女 |
| 3 | 王五 | 男 |
+----+--------+--------+
3 rows in set (0.00 sec)拓展:可指定查询特定字段,比如只查询姓名和性别:
select name, gender from student;实际开发中如需删除表或数据库,可使用以下语句,注意:删除操作不可逆,执行前务必确认数据是否需要备份!
-- 删除student表,添加if exists避免表不存在时报错
drop table if exists student;
-- 删除helloworld数据库,添加if exists避免数据库不存在时报错
drop database if exists helloworld;想要深入掌握 MySQL,不仅要会用,还要理解其底层架构。MySQL 是一个可移植的数据库,能在不同操作系统上运行,且在各个平台上的物理体系结构基本一致,其整体架构分为客户端层、MySQL 服务层、存储引擎层和文件系统层,四层架构相互配合,完成数据的存储和查询。

这是 MySQL 与外部程序的交互层,提供了多种编程语言的连接驱动,让不同语言的程序能访问 MySQL 数据库,主流的连接方式包括:
客户端层的核心作用是建立连接、发送 SQL 指令、接收返回结果,不参与数据库的核心处理。
这是 MySQL 的核心层,负责处理所有的业务逻辑,包含多个核心模块,是 SQL 语句的解析、优化、执行的核心区域,主要模块如下:
这是 MySQL 的特色层,插件式存储引擎是 MySQL 的核心设计,也是其灵活性的体现。存储引擎的本质是:数据库管理系统如何存储数据、如何为存储的数据建立索引、如何更新和查询数据的技术实现方法。
MySQL 支持多种存储引擎,可根据项目需求灵活选择,主流的存储引擎包括MyISAM、InnoDB、Memory、Archive等,其中InnoDB是 MySQL 5.5 及以后版本的默认存储引擎,支持事务和行级锁,是企业开发的首选。
这是 MySQL 的底层存储层,负责将数据以文件的形式存储在磁盘上,包括数据文件、日志文件、索引文件等,同时支持 SAN、NAS 等分布式存储系统,保障数据的持久化存储。
SQL(结构化查询语言)是操作关系型数据库的标准语言,MySQL 完全兼容 SQL 标准,并在此基础上做了少量扩展。根据功能的不同,SQL 可分为四大类,分别是 DDL、DML、DQL、DCL,每一类对应不同的操作场景,掌握分类能让我们更系统地学习 SQL 语句。
核心作用:维护存储数据的结构,即创建、修改、删除数据库、表、索引等数据库对象,不会对表中的数据进行操作。
代表指令:create(创建)、drop(删除)、alter(修改)
常用场景:项目初始化时创建数据库和表、需求变更时修改表结构(如添加字段、修改字段类型)、删除无用的数据库 / 表。
示例语句:
-- 创建数据库(DDL)
create database helloworld;
-- 创建表(DDL)
create table student(id int, name varchar(32));
-- 修改表:为student表添加age字段(整型)(DDL)
alter table student add column age int;
-- 删除表(DDL)
drop table student;核心作用:对表中的数据进行增、删、改操作,是实际开发中使用频率最高的 SQL 类型之一。
代表指令:insert(插入)、delete(删除)、update(修改)
常用场景:用户注册时插入用户数据、用户修改信息时更新数据、删除无用的业务数据。
示例语句:
-- 插入数据(DML)
insert into student (id, name) values (1, '张三');
-- 修改数据:将id=1的学生姓名改为“张三丰”(DML)
update student set name = '张三丰' where id = 1;
-- 删除数据:删除id=1的学生数据(DML)
delete from student where id = 1;重要提示:使用
update和delete时,务必添加 where 条件,否则会修改 / 删除表中的所有数据,造成不可逆的损失!
核心作用:从表中查询数据,是所有 SQL 语句中最复杂、使用频率最高的类型,单独从 DML 中划分出来,体现其重要性。
代表指令:select
常用场景:页面展示数据、数据统计、报表生成、业务逻辑中的数据查询。
基础示例:
-- 查询所有数据
select * from student;
-- 条件查询:查询性别为男的学生
select * from student where gender = '男';
-- 排序查询:按学号降序排列
select * from student order by id desc;拓展:DQL 支持联表查询、分组查询、聚合函数、子查询等复杂操作,是 MySQL 进阶学习的核心内容。
核心作用:主要负责权限管理和事务管理,控制数据库的访问权限和数据的一致性。
代表指令:grant(授予权限)、revoke(回收权限)、commit(提交事务)、rollback(回滚事务)
常用场景:为开发人员创建数据库账户并分配权限、回收离职人员的数据库权限、处理业务中的事务(如转账、下单等需要保证数据一致性的操作)。
示例语句:
-- 授予权限:给用户test分配helloworld数据库的所有表的查询、插入权限,允许从本地访问
grant select, insert on helloworld.* to 'test'@'localhost' identified by '123456';
-- 回收权限:回收test用户的插入权限
revoke insert on helloworld.* from 'test'@'localhost';
-- 提交事务:确认事务中的所有操作
commit;
-- 回滚事务:撤销事务中的所有操作,恢复到事务开始前的状态存储引擎是 MySQL 的核心特性,插件式的设计让 MySQL 能适应不同的业务场景,本节讲解存储引擎的基础概念、查看方式,以及主流存储引擎的核心对比。
存储引擎是 MySQL 中特有的概念,不同的存储引擎对应不同的数据存储机制,简单来说,存储引擎决定了表的存储方式、索引方式、事务支持、锁机制等。对于 MySQL 来说,不同的表可以使用不同的存储引擎,这意味着我们可以为一张高频查询的表选择适合查询的存储引擎,为一张需要保证数据一致性的表选择支持事务的存储引擎,灵活性拉满。
通过简单的 SQL 语句,即可查看当前 MySQL 服务器支持的所有存储引擎,以及默认存储引擎:
-- 查看所有存储引擎
show engines; 执行该语句后,会显示存储引擎的名称、是否支持事务、是否支持索引、是否支持行级锁等核心特性,其中Support列的值为DEFAULT的即为当前 MySQL 的默认存储引擎。

MySQL 支持的存储引擎众多,其中InnoDB和MyISAM是最常用的两个,也是面试中的高频考点,这里对两者的核心特性做详细对比,同时补充其他常用存储引擎的适用场景:
存储引擎 | 事务支持 | 行级锁 | 表级锁 | 索引类型 | 数据缓存 | 崩溃恢复 | 适用场景 |
|---|---|---|---|---|---|---|---|
InnoDB | 支持 | 支持 | 支持 | B + 树索引 | 支持 | 支持 | 电商、金融等需要事务、高并发的场景,默认存储引擎 |
MyISAM | 不支持 | 不支持 | 支持 | B + 树索引 | 不支持 | 不支持 | 静态网站、高频查询、无需事务的场景 |
Memory | 不支持 | 支持 | 支持 | 哈希 / BTREE | 内存存储 | 不支持 | 临时数据、缓存、高频访问的临时表 |
Archive | 不支持 | 不支持 | 支持 | 无索引 | 不支持 | 支持 | 日志存储、海量数据归档、仅插入和查询的场景 |

核心总结:
MySQL 的学习是一个循序渐进的过程,入门阶段重点掌握基础操作和核心概念,后续通过不断的实战和进阶学习,才能真正做到熟练运用,甚至优化 MySQL 的性能。希望本文能成为大家 MySQL 入门的敲门砖,后续会持续更新 MySQL 的进阶知识点,敬请关注! 如有问题可在评论区留言,一起交流学习~