MySQL 中文知识库
本页承担 README 职责:介绍知识库定位、目标读者、阅读路线、完整目录、版本说明、示例运行说明、更新规则与 RAG 使用建议。
一、知识库简介
这是一套系统化的 MySQL 中文知识库,覆盖从入门到进阶的完整知识体系:概念解释、操作示例、底层原理、版本差异、实践建议与故障排查。它既可用于零基础系统学习,也可作为日常工作中的查询手册,并可作为 AI 检索增强生成(Retrieval-Augmented Generation,RAG)的高质量知识源。
内容组织遵循"一个首页 + 一个术语表 + 多个主题目录"的形式,每个主题目录含一个导览页与若干可独立阅读的主题文档,天然适配按章节切分后的检索。
二、目标读者
| 读者 | 使用方式 |
|---|---|
| 数据库初学者 | 按"推荐学习路线"从第一章顺序学习 |
| 后端开发工程师 | 速查 SQL、索引、事务、锁相关章节(五、六、九、十、十一、十三) |
| 测试工程师 | 关注数据准备、事务隔离、并发现象(五、六、十、十一) |
| 初级 DBA | 掌握 InnoDB、日志、备份恢复、复制、监控、排障(八、十二、十五、十六、十八、十九) |
三、阅读路线
- 零基础路线:一 → 二 → 三 → 四 → 五 → 六
- 开发/测试速查:五、六、九、十、十一、十三
- 初级 DBA 路线:八、十二、十五、十六、十七、十八、十九
四、完整目录
全书 21 章已全部完成,均为可点击链接;每章含一个章节导览页与若干主题文档。
1、章节列表
- 术语表(glossary)
- 一、MySQL 简介与架构
- 二、安装、连接与基础配置
- 三、数据库、表、字段与约束
- 四、数据类型及选择原则
- 五、SQL 基础(DDL / DML / DQL / DCL / TCL)
- 六、高级查询
- 七、函数、视图、存储过程、触发器与事件
- 八、存储引擎与 InnoDB 基础
- 九、索引结构与索引设计
- 十、事务、隔离级别与 MVCC
- 十一、锁与死锁
- 十二、MySQL 日志(redo / undo / binlog / 两阶段提交)
- 十三、执行计划与 SQL 优化
- 十四、表结构设计(范式与反范式)
- 十五、备份与恢复
- 十六、复制与高可用
- 十七、安全与权限管理
- 十八、监控与配置
- 十九、故障诊断与处理
- 二十、MySQL 5.7 与 8.0 主要差异
- 二十一、综合实战、练习与面试题
2、旧编号重定向索引
知识库已完成从"30 篇精简版原理"到上述 21 章系统化结构的重构,原精简版文件已下线。若你通过旧链接或旧编号(第 1~30 条)访问,可在 精简版原理目录 查到"旧编号 → 新章节"的对应关系。
五、MySQL 版本说明
- 本知识库以 MySQL 8.0 为默认版本进行讲解,并在行为不一致处标注 MySQL 5.7 的关键差异。
- 涉及长期支持版本时,会提示 MySQL 8.4 LTS 的相关变化;如无法确认,会标注"需按对应版本手册验证"。
- 默认存储引擎为 InnoDB。涉及其他存储引擎(如 MyISAM、MEMORY)时会显式写明引擎名称与适用范围。
- 不混用 MariaDB 与 MySQL 的特性;涉及 MariaDB 时会单独标注。
六、示例运行说明
全库统一使用电商示例数据库 demo_shop,所有章节复用同一套表结构与初始化数据,确保示例可独立复现、命名一致。
1、实体关系
2、建库建表脚本
sql
-- 适用版本:MySQL 8.0(5.7 亦可运行,差异见下方说明)
-- 说明:字符集统一 utf8mb4,存储引擎 InnoDB
DROP DATABASE IF EXISTS demo_shop;
CREATE DATABASE demo_shop
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci; -- MySQL 5.7 请改为 utf8mb4_general_ci
USE demo_shop;
-- 用户表
CREATE TABLE users (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(50) NOT NULL COMMENT '用户名',
email VARCHAR(100) NOT NULL COMMENT '邮箱',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1正常,0禁用',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
UNIQUE KEY uk_username (username),
UNIQUE KEY uk_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 商品分类表
CREATE TABLE categories (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类ID',
name VARCHAR(50) NOT NULL COMMENT '分类名称',
parent_id INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父分类ID,0为顶级',
PRIMARY KEY (id),
KEY idx_parent_id (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表';
-- 商品表
CREATE TABLE products (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品ID',
category_id INT UNSIGNED NOT NULL COMMENT '分类ID',
name VARCHAR(200) NOT NULL COMMENT '商品名称',
price DECIMAL(10,2) NOT NULL COMMENT '单价',
stock INT NOT NULL DEFAULT 0 COMMENT '库存',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
KEY idx_category_id (category_id),
KEY idx_price (price)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
-- 订单表
CREATE TABLE orders (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '订单ID',
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
total_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '订单总额',
status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0待支付,1已支付,2已取消',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id),
KEY idx_user_id (user_id),
KEY idx_status_created (status, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
-- 订单明细表
CREATE TABLE order_items (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '明细ID',
order_id BIGINT UNSIGNED NOT NULL COMMENT '订单ID',
product_id BIGINT UNSIGNED NOT NULL COMMENT '商品ID',
quantity INT NOT NULL COMMENT '数量',
unit_price DECIMAL(10,2) NOT NULL COMMENT '成交单价',
PRIMARY KEY (id),
KEY idx_order_id (order_id),
KEY idx_product_id (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';3、初始化数据
sql
USE demo_shop;
INSERT INTO users (username, email, status) VALUES
('alice', 'alice@example.com', 1),
('bob', 'bob@example.com', 1),
('carol', 'carol@example.com', 0);
INSERT INTO categories (name, parent_id) VALUES
('电子产品', 0),
('手机', 1),
('图书', 0);
INSERT INTO products (category_id, name, price, stock) VALUES
(2, '示例手机 A', 2999.00, 100),
(2, '示例手机 B', 4999.00, 50),
(3, '示例图书 C', 59.90, 200);
INSERT INTO orders (user_id, total_amount, status) VALUES
(1, 2999.00, 1),
(2, 59.90, 0);
INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES
(1, 1, 1, 2999.00),
(2, 3, 1, 59.90);说明:以上账号、邮箱均为虚构示例值,不含真实凭证。示例结果与执行计划在不同 MySQL 版本、参数、数据量下可能不同,正文中会标注需实测确认之处。
七、内容更新规则
- 版本纪律:MySQL 5.7 与 8.0 行为不一致时分别说明适用版本,不混为一谈。
- 可复现:SQL 示例尽量包含建库、建表、初始化、执行与预期结果。
- 不臆造:无法确认的信息标注"需根据 MySQL 版本或实际环境验证",并给出验证方法。
- 风险显式化:危险操作(
DROP、TRUNCATE、无WHERE的UPDATE/DELETE、RESET MASTER、PURGE BINARY LOGS等)必须提示风险。 - 命名统一:SQL 关键字大写,库表字段用小写下划线命名;术语与示例模型全库一致。
- 交叉引用完整:新增章节需回填相关章节的"关联章节",避免断链。
- 目录编号:一级目录使用“一、二、三”,其子目录使用“1、2、3”且每章重新计数,不补前导零。文件路径保持稳定;标题变化时更新页内链接并保留旧锚点兼容。
八、RAG 使用建议
- 按文档切分:每篇主题文档是一个自包含知识单元,建议以"文档 + 二级标题"为切分粒度。
- 利用 frontmatter:每篇头部的
title / category / difficulty / mysql_versions / keywords可作为过滤与召回增强字段。 - 保留代码与表格:切分时不要拆散 SQL 代码块与结果表格,否则会损失"示例支持结论"的完整性。
- 版本过滤:检索时可用
mysql_versions字段按目标版本过滤,避免召回不适用的版本行为。 - 术语归一:结合 术语表 做同义词归一(如"临键锁 / Next-Key Lock"),提升召回率。
九、检索关键词
MySQL 知识库、MySQL 教程、MySQL 8.0、MySQL 5.7、InnoDB、索引、事务、MVCC、锁、备份恢复、主从复制、性能优化、故障排查、RAG 知识源。
