ZYH 开发教程
学习中心/数据库
数据库

数据库学习指南

关系模型、SQL、连接、约束、事务、索引、性能和维护的主线指南。

1. 关系型数据库基础#

必须掌握:数据库、表、行、列、数据类型;主键、外键、唯一、非空、检查约束;一对一、一对多、多对多。

用“订单”理解:用户表不应把所有订单塞进一个字段;订单通过 user_id 外键指向用户;订单与商品是多对多,需要 order_items 中间表。

设计顺序#

  1. 从需求中找实体:用户、商品、订单;
  2. 为实体选择稳定主键;
  3. 明确关系和基数;
  4. 给必填、唯一、范围等规则加数据库约束;
  5. 再考虑索引,不要先为每列建索引。

2. SQL 学习顺序#

第一组:基本操作#

  • CREATE DATABASE/SCHEMA/TABLE;
  • INSERT、SELECT、UPDATE、DELETE;
  • WHERE、AND/OR/NOT、IN、BETWEEN、LIKE、IS NULL;
  • ORDER BY、LIMIT/OFFSET;
  • COUNT/SUM/AVG/MIN/MAX、GROUP BY、HAVING。

警告:执行 UPDATE 或 DELETE 前,先用相同 WHERE 运行 SELECT,确认目标行。

第二组:多表与子查询#

  • INNER JOIN:只要两边匹配;
  • LEFT JOIN:保留左表全部数据;
  • 多表连接、表别名;
  • 普通子查询、EXISTS;
  • UNION 与 UNION ALL。

重点不是背语法,而是能从“我要哪些结果”倒推:结果列 → 来源表 → 连接条件 → 过滤 → 分组 → 排序。

第三组:正确性#

  • 事务的 ACID;
  • BEGIN、COMMIT、ROLLBACK;
  • 并发修改与隔离级别的基本意义;
  • 参数化查询,禁止拼接用户输入形成 SQL;
  • 迁移(migration)与种子数据(seed)的用途。

第四组:性能与维护#

  • B-tree 索引的直觉;复合索引的列顺序;
  • 用 EXPLAIN 看执行计划;
  • 索引加快读取但增加写入和存储成本;
  • 备份、恢复、角色和最小权限;
  • 连接池;慢查询日志。

后续再学#

窗口函数、CTE、全文检索、分区、复制、高可用、数据库内部原理。窗口函数很实用,可在完成主线项目后优先补。

3. 易错重点#

  • NULL 不是空字符串,也不能用 = NULL 判断;
  • 连接条件漏写会产生笛卡尔积;
  • 金额不要使用浮点数,使用精确小数或最小货币单位整数;
  • 日期时间要明确时区,后端通常统一保存 UTC;
  • 应用层校验不能替代数据库约束,两层都要有;
  • 密码不保存明文,也不使用普通快速哈希;应使用专用密码哈希;
  • 不要把“删除用户”直接级联到所有业务数据,先根据业务和合规要求设计。

4. 必做练习#

以图书借阅系统为题,设计 users、books、authors、book_authors、loans:

  1. 创建表和全部约束;
  2. 插入至少 10 用户、20 本书、30 条借阅记录;
  3. 查询当前未归还图书;
  4. 查询借阅次数最多的 5 本书;
  5. 查询从未借书的用户(练习 LEFT JOIN);
  6. 查询逾期记录;
  7. 用事务完成“借书”:检查库存、创建记录、减少库存,任一步失败全部回滚;
  8. 为常用查询建立合理索引,并用 EXPLAIN 对比;
  9. 导出备份,清空练习库,再恢复并核对行数。

5. 阶段验收#

  • 能画出 ER 图并解释每个关系。
  • 不看答案写出基本 CRUD、连接、聚合和分页。
  • 能解释主键、外键、唯一约束和索引的区别。
  • 能用事务保证一组操作要么全部成功、要么全部失败。
  • 能识别 SQL 注入风险并改成参数化查询。
  • 实际完成过一次备份和恢复。
可搜索标题、说明和正文Esc 关闭
从一个简单词开始试试“HTML”“数据库”“登录”或“部署”
在线练习修改代码并查看结果
运行结果