10 - 数据库入门

视频教程BV1Mm5kzHEWA

视频链接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')
JSONJSON数据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 对比

对比项MySQLMongoDB
数据模型关系型(表格)文档型(JSON)
查询语言SQLMQL(类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)可以对照学习,理解两种数据库的差异
返回首页