视频链接:BV1Mm5kzHEWA
发布日期:2025-04-18
视频时长:21:48
播放量:13.6万
所属合集:零基础AI全栈开发系列
视频概要
全栈系列的最新一集,补齐后端数据存储环节。讲解关系型数据库MySQL的核心概念,覆盖SQL语言基础、表设计、CRUD操作、聚合查询、多表联查、三大范式等。通过Sealos平台使用云数据库。
知识点清单
A. 数据库核心概念
| 知识点 | 说明 | 重要程度 |
|---|
| 数据库(DB) | 有组织地存储和管理数据的系统 | ★★★★★ |
| 关系型数据库 | 数据以表格形式存储,表之间通过关系关联 | ★★★★★ |
| 表(Table) | 数据的结构化存储单元 | ★★★★★ |
| 行(Row/Record) | 表中的一条数据记录 | ★★★★★ |
| 列(Column/Field) | 数据的属性字段 | ★★★★★ |
| 主键(Primary Key) | 唯一标识每条记录的字段(如id) | ★★★★★ |
| 外键(Foreign Key) | 建立表与表之间关系的字段 | ★★★★ |
| 索引(Index) | 加速查询的数据结构 | ★★★★ |
B. 数据库 vs Excel 对比
| 对比项 | 数据库(MySQL) | Excel |
|---|
| 数据量 | 百万~亿级 | 数万行就卡 |
| 并发访问 | 支持多用户同时操作 | 不支持 |
| 数据类型 | 严格类型约束 | 随意输入 |
| 关系查询 | 支持多表JOIN | 需要VLOOKUP公式 |
| 安全性 | 用户权限控制 | 无 |
| 程序化操作 | SQL/API标准接口 | 手动操作为主 |
| 适用场景 | 应用程序后端 | 数据分析、报表 |
C. SQL基础语法
-- ====================
-- 1. 数据库操作
-- ====================
CREATE DATABASE mydb; -- 创建数据库
USE mydb; -- 切换到数据库
-- ====================
-- 2. 表操作
-- ====================
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自动递增
name VARCHAR(100) NOT NULL, -- 姓名,不允许为空
email VARCHAR(100) UNIQUE, -- 邮箱,唯一约束
department VARCHAR(50), -- 部门
salary DECIMAL(10, 2), -- 薪资(精确到分)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间
);
-- 查看表结构
DESC employees;
-- ====================
-- 3. 增 (INSERT)
-- ====================
INSERT INTO employees (name, email, department, salary)
VALUES ('张三', 'zhangsan@example.com', '技术部', 15000.00);
-- 批量插入
INSERT INTO employees (name, email, department, salary)
VALUES ('李四', 'lisi@example.com', '产品部', 12000.00),
('王五', 'wangwu@example.com', '技术部', 18000.00);
-- ====================
-- 4. 查 (SELECT)
-- ====================
SELECT * FROM employees; -- 查询所有
SELECT name, salary FROM employees; -- 查询指定列
SELECT * FROM employees WHERE department = '技术部'; -- 条件查询
SELECT * FROM employees WHERE salary > 15000; -- 数值条件
SELECT * FROM employees WHERE name LIKE '%张%'; -- 模糊查询
SELECT * FROM employees ORDER BY salary DESC; -- 降序排列
SELECT * FROM employees ORDER BY salary ASC; -- 升序排列
SELECT * FROM employees LIMIT 10; -- 限制条数
SELECT * FROM employees LIMIT 10 OFFSET 20; -- 分页查询
SELECT DISTINCT department FROM employees; -- 去重查询
-- ====================
-- 5. 改 (UPDATE)
-- ====================
UPDATE employees SET salary = 18000.00 WHERE id = 1;
UPDATE employees SET department = '技术部', salary = 20000.00 WHERE name = '李四';
-- ====================
-- 6. 删 (DELETE)
-- ====================
DELETE FROM employees WHERE id = 1;
DELETE FROM employees WHERE department = '临时部';
-- ====================
-- 7. 聚合查询
-- ====================
SELECT COUNT(*) as total FROM employees; -- 总数
SELECT AVG(salary) as avg_salary FROM employees; -- 平均薪资
SELECT MAX(salary) as max_salary FROM employees; -- 最高薪资
SELECT MIN(salary) as min_salary FROM employees; -- 最低薪资
SELECT SUM(salary) as total_salary FROM employees; -- 薪资总和
SELECT department, COUNT(*) as count, AVG(salary) as avg_salary
FROM employees GROUP BY department; -- 分组聚合
-- ====================
-- 8. 多表联查(JOIN)
-- ====================
SELECT e.name, d.department_name, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.id; -- 内连接
SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id; -- 左连接
D. 数据类型
| 类型 | 说明 | 示例 |
|---|
| INT | 整数 | id INT |
| BIGINT | 大整数 | user_id BIGINT |
| VARCHAR(n) | 可变长度字符串 | name VARCHAR(100) |
| TEXT | 长文本 | content TEXT |
| DECIMAL(m,n) | 精确小数 | price DECIMAL(10,2) |
| FLOAT/DOUBLE | 浮点数(不精确) | score FLOAT |
| DATE | 日期 | birthday DATE |
| DATETIME | 日期时间 | created_at DATETIME |
| TIMESTAMP | 时间戳 | updated_at TIMESTAMP |
| BOOLEAN | 布尔值 | is_active BOOLEAN |
| ENUM | 枚举值 | status ENUM('active','inactive') |
| JSON | JSON数据 | metadata JSON |
E. 约束(Constraint)
| 约束 | 作用 | 示例 |
|---|
| PRIMARY KEY | 主键,唯一标识 | id INT PRIMARY KEY |
| AUTO_INCREMENT | 自动递增 | id INT AUTO_INCREMENT |
| NOT NULL | 不允许为空 | name VARCHAR(100) NOT NULL |
| UNIQUE | 唯一约束 | email VARCHAR(100) UNIQUE |
| DEFAULT | 默认值 | status INT DEFAULT 0 |
| FOREIGN KEY | 外键约束 | FOREIGN KEY (dept_id) REFERENCES departments(id) |
| CHECK | 检查约束 | CHECK (salary > 0) |
F. 数据库三大范式
| 范式 | 要求 | 示例 | 目的 |
|---|
| 第一范式(1NF) | 字段不可再分(原子性) | 地址应拆为省、市、区三个字段 | 消除重复组 |
| 第二范式(2NF) | 非主键字段完全依赖主键 | 订单表不应包含商品名称(应关联商品表) | 消除部分依赖 |
| 第三范式(3NF) | 非主键字段不能传递依赖 | 员工表不应包含部门电话(应关联部门表) | 消除传递依赖 |
G. MySQL vs MongoDB 对比
| 对比项 | MySQL | MongoDB |
|---|
| 数据模型 | 关系型(表格) | 文档型(JSON) |
| 查询语言 | SQL | MQL(类JSON) |
| 灵活性 | 需预定义表结构 | 字段可动态增减 |
| 事务支持 | 原生支持(ACID) | 4.0+支持 |
| 适用场景 | 复杂关系查询、事务 | 快速原型、灵活数据 |
| 在课程中 | 本集讲授 | 第06集讲授 |
常见问题
| 问题 | 解答 |
|---|
| 数据库和Excel有什么区别? | 数据库支持并发、事务、关系查询,适合程序化操作,Excel适合手动分析 |
| SQL难学吗? | 基础增删改查很简单,复杂查询需要多练习 |
| 什么时候用MySQL,什么时候用MongoDB? | 数据关系复杂、需要事务用MySQL;灵活变化、快速原型用MongoDB |
| localhost是什么? | 本机地址,表示数据库运行在自己电脑上 |
| root密码忘记了怎么办? | 通过安全模式重置,或重新安装数据库 |
| 什么是索引? | 类似书的目录,加速查询但会略微降低写入速度 |
| JOIN有几种? | INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)最常用 |
前置知识检查
- [x] 了解后端API开发(Express路由)
- [x] 了解JSON数据格式
- [x] 有Sealos账号
学习建议
- SQL的增删改查(CRUD)是必须掌握的核心技能
- 不需要死记SQL语法,善用AI工具查询
- 先理解表结构设计,再学具体SQL语句
- 建议在Sealos上创建云数据库,跟着练习
- 本集与第06集(Node.js + MongoDB)可以对照学习,理解两种数据库的差异