关系型数据库教程 - MySQL与PostgreSQL完整指南
现在做Web开发、分析用户行为、甚至AI训练前的大规模数据预处理,关系型数据库(RDBMS) 都是绕不开的核心工具栈。而开源生态里的双雄——MySQL 8.0+ 和 PostgreSQL 14+,更是从个人小项目到互联网大厂应用的绝对主流选择。
道满PythonAI的这套完整教程,避开了枯燥的纯理论堆砌,用「基础+进阶+Python实战落地」的三层结构,帮你快速掌握从建表到优化、从原生SQL到Python ORM的全链路能力。
课程概览
🎯 你将获得什么?
通过这套教程,你可以:
- 搞懂关系型数据库的核心底层逻辑(不用死记硬背术语)
- 写出规范、高效、防注入的各类SQL语句
- 精准判断MySQL/PostgreSQL的项目适配场景
- 设计出符合三范式但又能灵活扩展的表结构
- 用Python实现高可用、高性能的数据库应用
- 应对面试中常见的「索引优化」「锁机制」「事务处理」问题
👥 谁适合学?
- 数据库纯小白:想从零搭一个能跑的小系统数据库
- Web/全栈开发工程师:补全数据库「只会写简单CRUD」的短板
- Python数据分析师:提升大规模数据的查询速度与处理效率
- 系统架构入门者:为后续学习分布式/NoSQL打基础
📚 课程大纲(三层式递进)
🟢 第一部分:基础入门篇(从0到能写简单项目)
这一部分会先帮你建立对RDBMS的直观认知,再把SQL语言五件套(DDL/DML/DQL/DCL/TCL核心逻辑) 拆解得明明白白,配合可直接复制的小例子练手。
-
关系型数据库和MySQL与PostgreSQL概述
✅ 什么是ACID?为什么关系型库更靠谱?
✅ 双雄对比:什么时候用MySQL,什么时候选PostgreSQL?
✅ 本地快速安装配置(附Windows/Mac/Linux一键脚本思路) -
SQL的增删改查-DDL数据定义
✅ 创建/删除/修改数据库、表、约束(主键/外键/唯一/非空/默认)
✅ 索引的基础创建与删除(先会用,原理留到进阶)
✅ 双雄DDL的小语法差异(比如自增主键的写法) -
SQL的增删改查-DML数据操作
✅ 安全的批量插入、更新、删除操作
✅ 避免常见的DML错误(比如没有WHERE条件全表删除) -
SQL的增删改查-DQL数据查询
✅ 单表查询的进阶筛选(LIKE/IN/BETWEEN/ORDER BY/LIMIT分页)
✅ 多表关联(内连接/左连接/右连接的区别与场景)
✅ 子查询、聚合函数、分组与过滤(HAVING) -
SQL的增删改查-DCL数据控制
✅ 创建/删除用户、授予/回收权限
✅ 基础的事务控制(TCL逻辑也会在这里融合讲解)
🔵 第二部分:进阶提升篇(写出能上线的代码)
如果你已经写过简单的学生管理/博客系统表结构,但遇到「查询慢」「业务复杂不会抽象」「锁冲突不知道怎么查」的问题,这部分是重点。
-
MySQL与PostgreSQL新特性对比
✅ MySQL 8.0的CTE、窗口函数、JSON字段增强
✅ PostgreSQL 14+的存储过程简化、JSONB索引优化、分区表改进
✅ 如何根据新特性做技术选型决策 -
视图、函数和过程
✅ 什么时候用视图替代复杂查询?
✅ 存储函数/存储过程的编写与安全边界(什么时候该用,什么时候该避免) -
索引优化策略
✅ B+树索引的核心工作原理(大白话,无公式)
✅ 联合索引的最左前缀原则、覆盖索引、索引失效的常见场景
✅ MySQL的EXPLAIN和PostgreSQL的EXPLAIN ANALYZE使用方法
🟡 第三部分:Python实战篇(把知识落地成项目)
这一部分我们会用Python连接双雄数据库,从原生驱动到成熟的ORM框架,教你如何写出企业级可维护、可扩展的代码。
- Python接入MySQL与PostgreSQL数据库
✅ 原生驱动的连接(PyMySQL/psycopg2)
✅ 连接池的使用(避免频繁创建销毁连接)
✅ SQLAlchemy ORM的基础与进阶(多表关联映射、事务管理)
✅ 参数化查询的重要性(彻底杜绝SQL注入)
🛤️ 个性化学习路径
纯小白路径
- 概述篇建立认知 → 本地安装测试
- DDL建表练手(比如先建个简单的「用户+文章」表)
- DML/DQL交替练习(先往表里插点假数据,再查出来玩)
- 学完DQL的联合查询后,做个微型博客的SQL原型
- 最后快速过DCL/进阶的索引基础,再学Python实战
有基础开发者路径
- 跳过基础入门篇的前4节,直接看索引优化策略和双雄新特性对比
- 学视图、函数、过程补全业务抽象能力
- 重点攻克Python的SQLAlchemy ORM进阶和连接池使用
💡 配套实践项目(学完每部分都有得做)
基础篇项目:班级考勤管理SQL原型
要求:实现班级、学生、考勤记录的三表关联,支持按日期/学生/班级查询考勤,支持批量插入假数据。
进阶篇项目:电商订单表优化
给定一套原始、查询慢的订单相关表,要求:
- 分析索引缺失或失效的地方
- 用视图或窗口函数优化复杂查询
- 考虑分库分表的前期准备(或者用PostgreSQL的分区表)
Python实战篇项目:简易博客后端数据层
要求:用FastAPI+SQLAlchemy ORM实现用户、文章、评论的CRUD接口,使用连接池,支持事务处理。
🛠️ 本教程涉及的技术栈
- 数据库系统: MySQL 8.0+, PostgreSQL 14+(稳定主流版本)
- 编程语言: Python 3.8+
- 数据库驱动: PyMySQL, psycopg2-binary
- ORM框架: SQLAlchemy 2.0+(最新异步+同步兼容版本)
- 可视化工具: MySQL Workbench, pgAdmin 4, VS Code(带数据库插件)
📖 学习技巧(踩坑总结)
- 边学边敲:SQL和Python代码一定要自己敲一遍,不能只看(很多语法差异敲的时候才会发现)
- 先写正确的,再优化:不要一开始就纠结性能,先把需求用最简单的SQL实现,再用EXPLAIN/EXPLAIN ANALYZE分析优化
- 注意事务边界:尤其是涉及多表操作的业务,一定要加事务
- 学会查官方文档:遇到版本问题或特殊语法,官方文档是最靠谱的
❓ 常见问题速答
Q:MySQL和PostgreSQL选哪个入门?
A:纯小白建议选MySQL——语法相对宽松,网上的入门教程和问题解答更多;如果对JSON处理、地理空间数据、复杂查询有需求,或者想更贴近SQL标准,直接选PostgreSQL也没问题。
Q:Python数据库编程用原生驱动还是ORM?
A:小项目/简单查询用原生驱动足够;中大型项目、团队协作推荐用SQLAlchemy ORM 2.0+——可以避免手写大量重复SQL,代码可维护性更高,还能支持异步操作。
Q:索引是不是建得越多越好?
A:绝对不是!索引会占用存储空间,还会降低INSERT/UPDATE/DELETE的速度——因为修改数据的时候,索引也要同步更新。只给经常出现在WHERE、ORDER BY、JOIN ON里的字段建索引。
🎯 后续拓展方向
完成本教程后,你可以根据兴趣继续学习:
- NoSQL数据库:Redis(缓存)、MongoDB(非结构化数据)
- 数据仓库:ClickHouse、Snowflake(大规模数据分析)
- 数据库集群:MySQL主从复制、PostgreSQL流复制
- 云数据库服务:阿里云RDS、腾讯云PostgreSQL、AWS Aurora
- 数据库安全与合规性:数据加密、审计日志、权限分级

