Skip to content

MySQL 中文知识库 ​

本页承担 README 职责:介绍知识库定位、目标读者、阅读路线、完整目录、版本说明、示例运行说明、更新规则与 RAG 使用建议。

一、知识库简介 ​

这是一套系统化的 MySQL 中文知识库,覆盖从入门到进阶的完整知识体系:概念解释、操作示例、底层原理、版本差异、实践建议与故障排查。它既可用于零基础系统学习,也可作为日常工作中的查询手册,并可作为 AI 检索增强生成(Retrieval-Augmented Generation,RAG)的高质量知识源。

内容组织遵循"一个首页 + 一个术语表 + 多个主题目录"的形式,每个主题目录含一个导览页与若干可独立阅读的主题文档,天然适配按章节切分后的检索。

二、目标读者 ​

读者使用方式
数据库初学者按"推荐学习路线"从第一章顺序学习
后端开发工程师速查 SQL、索引、事务、锁相关章节(五、六、九、十、十一、十三)
测试工程师关注数据准备、事务隔离、并发现象(五、六、十、十一)
初级 DBA掌握 InnoDB、日志、备份恢复、复制、监控、排障(八、十二、十五、十六、十八、十九)

三、阅读路线 ​

  • 零基础路线:一 → 二 → 三 → 四 → 五 → 六
  • 开发/测试速查:五、六、九、十、十一、十三
  • 初级 DBA 路线:八、十二、十五、十六、十七、十八、十九

四、完整目录 ​

全书 21 章已全部完成,均为可点击链接;每章含一个章节导览页与若干主题文档。

1、章节列表 ​

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 版本、参数、数据量下可能不同,正文中会标注需实测确认之处。

七、内容更新规则 ​

  1. 版本纪律:MySQL 5.7 与 8.0 行为不一致时分别说明适用版本,不混为一谈。
  2. 可复现:SQL 示例尽量包含建库、建表、初始化、执行与预期结果。
  3. 不臆造:无法确认的信息标注"需根据 MySQL 版本或实际环境验证",并给出验证方法。
  4. 风险显式化:危险操作(DROP、TRUNCATE、无 WHERE 的 UPDATE / DELETE、RESET MASTER、PURGE BINARY LOGS 等)必须提示风险。
  5. 命名统一:SQL 关键字大写,库表字段用小写下划线命名;术语与示例模型全库一致。
  6. 交叉引用完整:新增章节需回填相关章节的"关联章节",避免断链。
  7. 目录编号:一级目录使用“一、二、三”,其子目录使用“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 知识源。

ICP 备案号待补充 · Gitee 主页