文章目录
- MySQL入门保姆级指南:从“为啥不用文件存数据”到搞懂四层架构
- 一、灵魂拷问:有文件了,还要数据库干嘛?
- 二、数据库圈的“各路神仙”:主流数据库扫盲
- 1. 企业级老大哥:Oracle
- 2. 国民级顶流:MySQL
- 3. 微软全家桶选手:SQL Server
- 4. 学霸开源款:PostgreSQL
- 5. 迷你嵌入式:SQLite / H2
- 三、MySQL 初上手:从连接到写出第一条 SQL
- 1. 先搞懂:服务器、数据库、表是什么关系?
- 2. 连接 MySQL:命令详解 + 踩坑指南
- 参数详解(重点!初学者90%的坑都在这)
- 3. 服务怎么启停?
- 4. 五分钟完成:建库→建表→插数据→查询
- 5. 字符集这个坑:别用 utf8,要用 utf8mb4
- 四、扒开 MySQL 的壳:四层架构到底干了啥
- 第一层:接待处——连接池(Connection Pool)
- 第二层:大脑——SQL 处理层
- 第三层:干活的——可插拔存储引擎
- 第四层:家底——文件系统
- 一条 SQL 的旅行日记
- 五、SQL 的三大门派:DDL、DML、DCL
- 1. DDL:数据定义语言
- 2. DML:数据操纵语言
- 3. DCL:数据控制语言
- 六、存储引擎:MySQL 的“可更换心脏”
- 1. 什么是存储引擎?
- 2. 两大经典引擎对比:InnoDB vs MyISAM
- 写在最后
MySQL入门保姆级指南:从“为啥不用文件存数据”到搞懂四层架构
很多刚接触编程的同学都会有一个灵魂拷问:
我用 txt、Excel 存数据不行吗?为啥非要整个数据库出来,又是安装又是配置,麻烦得要死?
别急,这篇文章就从这个问题出发,带你从零开始啃完 MySQL 基础。看完你不仅能上手写 SQL,还能跟人扯清楚 MySQL 内部四层架构,面试基础面直接通关。
一、灵魂拷问:有文件了,还要数据库干嘛?
咱们先说说用文件存数据的几宗罪:
查询慢到怀疑人生
你想在 100 万行的 CSV 里找一条特定数据?基本得从头扫到尾,数据量一大,找个数据比在乱房间里找袜子还慢。安全性几乎为零
文件说删就删、说改就改,没有权限控制,也没有操作留痕。哪天手滑删错文件,直接连夜买站票跑路。海量数据扛不住
文件越大读写越卡顿,到了 TB 级别,普通文件系统基本就卡成 PPT 了。程序控制太麻烦
想在代码里实现“按条件修改某几行数据”,用文件得自己写一堆读写、定位、判断逻辑,纯纯重复造轮子。
而数据库,就是专门为了解决这些问题诞生的数据管理系统。它把数据有条理地组织起来,提供标准 SQL 语言来操作,自带权限、事务、索引等一堆黑科技,本质就是在文件系统之上,又封装了一层更智能的数据管理层。
二、数据库圈的“各路神仙”:主流数据库扫盲
现在市面上的数据库五花八门,先给大家盘几个最常见的,心里先有个数:
1. 企业级老大哥:Oracle
甲骨文公司的旗舰闭源商业数据库,贵,但是稳。
银行、国企、大型企业核心系统的标配,主打一个“不出事”。功能极强、性能拉满,就是授权费能让小公司望而却步。
顺带一提:咱们学的 MySQL,现在也是甲骨文旗下的产品。
2. 国民级顶流:MySQL
全世界使用最广的开源数据库,互联网公司标配。
并发能力强,对简单 SQL 的处理速度快,电商、社交、论坛这类场景基本都是它的天下。
优点是免费、生态好、学习资料多;缺点是面对极复杂业务逻辑时,性能不如 Oracle。
3. 微软全家桶选手:SQL Server
微软自家产品,.NET 开发的标配。
和 Windows 生态深度绑定,图形化工具做得很友好,中大型项目用得多。
4. 学霸开源款:PostgreSQL
加州大学伯克利分校研发,完全开源免费,可商用可二次修改。
功能非常强大,支持很多复杂数据类型和高级特性,这几年热度飙升,很多公司开始从 MySQL 转向 PG。
5. 迷你嵌入式:SQLite / H2
这俩都是“小个子”选手:
- SQLite:C 语言编写的轻量数据库,整个程序就一个小文件,嵌入式设备、手机 APP 里常用,几百 KB 内存就能跑。
- H2:Java 编写的嵌入式数据库,直接当作 jar 包嵌进项目里,本地开发测试非常方便。
三、MySQL 初上手:从连接到写出第一条 SQL
咱们以最经典的 MySQL 5.7 为例,从零跑通第一波操作。
1. 先搞懂:服务器、数据库、表是什么关系?
很多初学者一开始会把这仨搞混,其实逻辑很简单:
- 数据库服务器(MySQL Server):安装在机器上的后台程序,一台机器一般装一个,它可以同时管理很多个数据库。
- 数据库(Database):可以理解成独立的仓库,一般一个项目对应一个数据库。比如电商项目建
shop库,博客项目建blog库。 - 表(Table):数据库里的一张张表格,用来存储一类具体数据。比如用户表、商品表、订单表。
一句话总结:一个服务器管多个仓库,一个仓库里放多个货架,货架上摆着数据。
2. 连接 MySQL:命令详解 + 踩坑指南
安装完 MySQL 服务后,我们用客户端命令去连接它。标准命令长这样:
mysql-h127.0.0.1-P3306-uroot-p参数详解(重点!初学者90%的坑都在这)
| 参数 | 含义 | 注意事项 |
|---|---|---|
-h | 主机地址 | 本机连接可以省略,默认连 localhost |
-P | 端口号 | 大写P!默认 3306,可省略 |
-u | 用户名 | 比如管理员账号 root |
-p | 密码 | 小写p!后面不要直接写密码,回车后再输入,更安全 |
❌ 经典错误写法:
mysql -h 127.0.0.1 -p 3306 -u root -p
小写-p后面的3306会被 MySQL 当成数据库名,直接报错Unknown database '3306',这个坑几乎人人踩过。
回车后输入密码,看到mysql>提示符,就说明连接成功了。
小提示:SQL 语句末尾要加分号
;代表结束,也可以用\g,效果完全一样。
3. 服务怎么启停?
MySQL 是后台服务,不同系统管理方式不同:
- Windows:按下
Win+R输入services.msc,在服务管理器里找到 MySQL 服务,就能启停。 - Linux/CentOS:用 systemctl 命令管理
systemctl start mysqld# 启动systemctl stop mysqld# 停止systemctl restart mysqld# 重启systemctl status mysqld# 查看状态
4. 五分钟完成:建库→建表→插数据→查询
一套标准流程,直接复制就能跑:
-- 1. 创建数据库,指定字符集(划重点!)CREATEDATABASEhelloworldDEFAULTCHARACTERSETutf8mb4;-- 2. 进入这个数据库USEhelloworld;-- 3. 创建学生表CREATETABLEstudent(idINT,nameVARCHAR(32),genderVARCHAR(2));-- 4. 插入三条数据INSERTINTOstudent(id,name,gender)VALUES(1,'张三','男');INSERTINTOstudent(id,name,gender)VALUES(2,'李四','女');INSERTINTOstudent(id,name,gender)VALUES(3,'王五','男');-- 5. 查询所有数据SELECT*FROMstudent;5. 字符集这个坑:别用 utf8,要用 utf8mb4
这里补一个教材里很少提但必踩的坑:
MySQL 里的utf8不是真正的 UTF-8,它最多只存 3 个字节,存不了 emoji 表情和生僻字。
真正的 UTF-8 是utf8mb4,支持 4 字节存储。
建库一律默认用 utf8mb4,省得后面出现乱码拍大腿。
四、扒开 MySQL 的壳:四层架构到底干了啥
很多人学了半年 SQL,都不知道 MySQL 内部长啥样。其实它就是典型的分层设计,从上到下一共四层,咱们一层一层扒。
第一层:接待处——连接池(Connection Pool)
所有客户端连接,第一步都到这。
负责连接管理、账号密码认证、安全校验,就像公司前台,先核对你有没有预约(密码对不对),再给你发个访客牌(连接)。
第二层:大脑——SQL 处理层
这一层是 MySQL 的核心,只负责处理 SQL 逻辑,不直接碰磁盘。
- SQL 接口:接收客户端发过来的 SQL 语句。
- 解析器(Parser):检查 SQL 语法是否正确,比如你写
show databass;拼错单词,就是在这被拦下的。 - 优化器(Optimizer):同一条 SQL 有很多种执行方式,优化器会选出成本最低的方案。比如要不要走索引、先查哪张表。
- 缓存(Caches):查询过的结果会缓存起来,下次同样的查询直接返回,不用去读磁盘。
旁边还有一堆工具组件:备份恢复、主从复制、集群、分区等等。
第三层:干活的——可插拔存储引擎
这是 MySQL 最有特色的设计:插件式存储引擎。
上面的 SQL 层只下发“读数据、写数据”的命令,具体怎么存、怎么读,全靠存储引擎实现。不同的存储引擎,有完全不同的特性。
常见的引擎有 InnoDB、MyISAM、Memory、Archive 等等。
现在默认、也是最常用的就是 InnoDB,支持事务、行锁、崩溃恢复,项目开发基本都用它。
第四层:家底——文件系统
最底层就是操作系统的文件系统(Linux 的 ext4、Windows 的 NTFS),也可以是 SAN、NAS 这类存储设备。
所有的数据、索引、日志,最终都会写成磁盘上的文件。
一条 SQL 的旅行日记
给大家捋一遍SELECT * FROM student WHERE id=1;的完整流程:
- 客户端发请求 → 连接池校验账号密码,建立连接
- SQL 语句交给 SQL 接口
- 解析器检查语法,生成语法树
- 优化器生成执行计划,决定走主键查询
- 调用 InnoDB 存储引擎去读取数据
- InnoDB 先查缓存,没有就去磁盘查找,把数据返回
- 结果原路返回给客户端
五、SQL 的三大门派:DDL、DML、DCL
SQL 语句按功能分成三大类,别记混了:
1. DDL:数据定义语言
Data Definition Language,用来定义数据结构。
通俗说就是建库、建表、改表结构这类“搞建筑”的操作。
代表命令:CREATE(创建)、DROP(删除)、ALTER(修改)
2. DML:数据操纵语言
Data Manipulation Language,用来操作表里的数据。
就是增、删、改、查,日常开发写得最多的就是这类。
其中查询语句SELECT又单独被称为DQL(数据查询语言)。
代表命令:INSERT、DELETE、UPDATE、SELECT
3. DCL:数据控制语言
Data Control Language,用来管理权限、控制事务。
比如创建用户、给用户授权、提交事务这些。
代表命令:GRANT(授权)、REVOKE(撤权)、COMMIT(提交事务)
六、存储引擎:MySQL 的“可更换心脏”
1. 什么是存储引擎?
简单说,存储引擎就是数据的存储方式 + 读写实现逻辑。
MySQL 厉害就厉害在,你可以给每张表选不同的存储引擎,就像给不同的车装不同的发动机——拉货用柴油机,跑赛道用汽油机。
查看所有引擎的命令:
SHOWENGINES;2. 两大经典引擎对比:InnoDB vs MyISAM
这是面试基础题必考点,直接整理成对比表:
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | ✅ 支持(核心优势) | ❌ 不支持 |
| 锁粒度 | 行级锁,并发性能高 | 表级锁,并发性能差 |
| 崩溃恢复 | ✅ 支持,不容易丢数据 | ❌ 崩溃后容易损坏 |
| 外键约束 | ✅ 支持 | ❌ 不支持 |
| 全文索引 | 5.7 版本后开始支持 | ✅ 原生支持 |
| 适用场景 | 绝大多数业务场景,需要事务、高并发 | 读多写少的简单场景,现在基本淘汰 |
一句话总结:现在开发无脑用 InnoDB 就对了,MyISAM 是上古时代的产物,了解历史就行。
写在最后
MySQL 入门其实不难,难的是很多人上来就死背语法,却没搞懂“为什么这么设计”。
这篇文章带你从“为什么要有数据库”讲到内部架构,再到基础操作,就是希望你先建立一个整体的认知。
接下来的学习建议:
- 多敲命令,别光看。SQL 是敲出来的,不是背出来的。
- 先把基础的增删改查、条件查询、联表查询练熟。
- 再去深入索引、事务、存储引擎这些进阶内容。
祝大家 SQL 写得飞起,永不死锁~