技术栈学院 · 数据库三剑客

全世界绝大多数应用背后,都蹲着三个沉默的胖子:MySQL、Oracle、PostgreSQL。它们干的是同一件事——把数据存起来,再按你的要求精准地捞回来。这一页把三家一次性讲透:从装环境、写 SQL、建索引、搞事务,到备份恢复、主从集群、面试题,最后给你一张"到底该选谁"的选型表。读完它,数据库面试的大半壁江山就拿下了。

00
第 1 节 · 最新版本与兼容性
Versions & Licensing

版本基线:MySQL 8.4 LTS / Oracle 23ai / PostgreSQL 17,学哪档别追新。

进入本节 →
01
第 2 节 · 三库对比总览
At-a-Glance Comparison

三家一句话对比:定位、许可证、擅长场景一张表认清。

进入本节 →
02
第 3 节 · 数据库设计基础:ER 图、主键外键、范式
Schema Design · Keys & Normalization

ER 图、三大范式、字段类型选型,建库前的内功。

进入本节 →
03
第 4 节 · MySQL 完整章节
MySQL 8.4 LTS · From Install to Replication

MySQL 全章:DDL/DML、索引 EXPLAIN、事务、主从、备份。

进入本节 →
04
第 5 节 · Oracle 完整章节
Oracle 23ai · The Enterprise Heavyweight

Oracle 全章:PL/SQL、存储过程、RAC、企业级运维。

进入本节 →
05
第 6 节 · PostgreSQL 完整章节
PostgreSQL 17 · The Most Advanced Open Source DB

PostgreSQL 全章:标准 SQL、JSON、PostGIS、pgvector。

进入本节 →
06
第 7 节 · 三库对比与选型
Cross-DB Reference & Picking the Right One

三库怎么选:按业务规模、团队、场景拍板。

进入本节 →
08
第 8 节 · 分布式事务:2PC / TCC / Saga / 本地消息表
Distributed Transactions · 2PC / TCC / Saga / Local Message Table

分布式事务:2PC / TCC / Saga / 本地消息表怎么选。

进入本节 →
09
第 9 节 · Redis 高可用与持久化深入:RDB / AOF / 哨兵 / Cluster
Redis Persistence, Replication, Sentinel & Cluster

Redis 高可用:持久化 RDB/AOF、主从、哨兵、Cluster。

进入本节 →
10
第 10 节 · 分析型与嵌入式 OLAP:ClickHouse 与 DuckDB
Analytical Databases · ClickHouse & DuckDB

分析型数据库:ClickHouse / DuckDB 列式存储实战。

进入本节 →
11
第 11 节 · 数据库迁移与版本化:Flyway / Liquibase
Schema Migration & Version Control · Flyway / Liquibase

数据库版本化:Flyway / Liquibase 迁移脚本规范。

进入本节 →
07

全书小结与自测

Wrap-up & Self Test
记
读完这一页,你应该掌握了

① 三家各有家脾气:MySQL 简单快、生态大;Oracle 贵稳强、PL/SQL + RAC;PostgreSQL 标准全、扩展强、pgvector 适合 AI。

② 通用内功三家都通:SQL(DDL/DML/DQL/JOIN/子查询/聚合)、索引与 EXPLAIN、事务与 ACID、备份恢复、主从复制。

③ 选型别纠结:业务简单快速上线选 MySQL;金融核心选 Oracle;要 GIS/向量/复杂查询选 PostgreSQL。

④ 动手比看重要:挑一家(建议 MySQL),用 Docker 起一个库,把本章所有 SQL 自己敲一遍,错几次就全懂了。

自测 5 道题(折叠看答案)

最终自测

1.(概念题)为什么说"索引就是书的目录"?索引有什么代价?

查看答案

答案:索引让数据库不用全表扫描就能定位行,像目录直接翻到页码。但索引要占磁盘空间,而且每次 INSERT/UPDATE/DELETE 都要同步维护索引,写越多、索引越多,写入越慢。所以索引不是越多越好,只为高频查询列建。

2.(事务题)转账:A 扣 100、B 加 100。中间数据库崩了,事务靠什么保证钱不丢?

查看答案

答案:靠事务的原子性——没 COMMIT 就不算数,崩溃后回滚到事务开始前。持久性靠 redo log 落盘,COMMIT 后就算断电也能恢复。

3.(SQL 题)SELECT * FROM t WHERE name LIKE '%张%' 为什么走不了 name 上的普通索引?怎么优化?

查看答案

答案:前导通配符 % 让 B+ 树无法按前缀定位。优化:用全文索引(MySQL FULLTEXT / PG GIN + 分词),或把这种搜索挪到 Elasticsearch 等专门搜索引擎。

4.(选型题)你要做一个"附近的人"功能,按经纬度找半径 5 公里内的用户,三家里哪家最顺手?

查看答案

答案:PostgreSQL + PostGIS,原生支持几何类型和空间索引(GiST),空间查询函数齐全。MySQL 也有空间类型但生态远不如 PostGIS。

5.(运维题)线上库早上发现昨晚有人误 DELETE 了一张表的数据,你有全量备份和持续的 binlog/WAL,怎么恢复?

查看答案

答案:先恢复最近一次全量备份,再重放 binlog/WAL 到误操作前的时刻(PITR 时间点恢复)。所以"全量 + 持续归档日志"是能救命的标准配置——没归档日志就只能恢复到上次全量,中间数据全丢。

进阶学习路线

从"会用"到"精通"的下一步
阶段学什么
入门(已完成)装环境、写 SQL、建索引、懂事务。
进阶主从复制、读写分离、慢 SQL 调优、备份恢复演练。
深入内核原理(B+树、MVCC、WAL)、分库分表、分布式事务。
专精选一家深入:MySQL InnoDB 内幕 / Oracle OCP / PostgreSQL 源码与扩展开发。
路
下一步往哪走

① 把本章 MySQL 章节的 SQL 在自己 Docker 里敲一遍,再故意写几条慢 SQL 用 EXPLAIN 看效果。

② 想搞 AI/RAG,就装个 PostgreSQL + pgvector,把你自己的文档向量化存进去跑一次检索。

③ 数据库是后端的半壁江山,和前面学的 Node.js、Redis 串起来,你就有完整的后端栈了。

附:数据库性能优化总清单

遇到慢,按这个顺序查
层检查点
SQL 层EXPLAIN 看有没有全表扫、是否走对索引、是否回表、是否 filesort。
索引层高频查询列建索引、联合索引最左前缀、覆盖索引、删掉无用索引。
表设计层大表分区/分表、避免 SELECT *、控制单行宽度。
架构层Redis 缓存热点、读写分离、连接池、限流。
资源层CPU/IO/内存是否打满、锁等待、主从延迟。

附:一张能直接背的三库命令速查卡

换库最容易犯的就是"按上一家的肌肉记忆敲命令"。下面这张卡把三家最常敲的对一下,存手机里随时翻。

日常高频命令三家对照
要做的事MySQLOraclePostgreSQL
看当前库SELECT DATABASE();SELECT name FROM V$DATABASE;SELECT current_database();
看所有表SHOW TABLES;SELECT * FROM USER_TABLES;\dt
看表结构DESC 表名;DESC 表名\d 表名
看执行计划EXPLAIN SQLEXPLAIN PLAN FOR ...EXPLAIN ANALYZE SQL
当前连接数SHOW PROCESSLIST;SELECT * FROM V$SESSION;SELECT * FROM pg_stat_activity;
建索引CREATE INDEX ... ON 表(列);同左同左(可选 USING gin/btree)
统计分析ANALYZE TABLE 表;DBMS_STATS.GATHER_TABLE_STATSANALYZE 表;
记
速查卡的使用心法

别真去背这张表。用得最多的是"看执行计划"和"看慢在哪"——只要养成"一慢就先 EXPLAIN"的肌肉记忆,其他命令用到时查就行。数据库这东西,熟手和新手的差别不在记了多少命令,而在遇到慢时知道从哪下手。

另外提醒:命令行客户端三家各有快捷键,mysql 用 source 文件 执行脚本,psql 用 \i 文件,sqlplus 用 @文件。这三个记混了会浪费一晚上。

到这里,数据库三剑客这本"小书"就翻完了。下一步只剩一件事:打开终端,敲第一条 SQL。

别光收藏——动手的那一刻,知识才算真正长在你身上。