全栈开发
数据库与 SQL 基础
掌握关系型数据库设计和核心 SQL
- 理解关系型数据库基本概念
- 掌握 CREATE TABLE / INSERT / SELECT / UPDATE / DELETE
- 理解表关系(一对一、一对多、多对多)
- 掌握 JOIN 查询
关系型数据库
关系型数据库(如 PostgreSQL、MySQL)用表(Table)存储数据,表由行(Row)和列(Column)组成。表之间可以建立关系。
SQL
-- 创建用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- 自增主键
name VARCHAR(100) NOT NULL, -- 用户名,非空
email VARCHAR(255) UNIQUE, -- 邮箱,唯一
age INTEGER DEFAULT 0, -- 年龄,默认0
created_at TIMESTAMP DEFAULT NOW()
);
-- 插入数据
INSERT INTO users (name, email, age)
VALUES ('小明', 'xm@test.com', 25);
-- 查询数据
SELECT * FROM users; -- 所有用户
SELECT name, email FROM users WHERE age > 18; -- 成年人
SELECT * FROM users ORDER BY age DESC LIMIT 10; -- 年龄最大的10个
-- 更新
UPDATE users SET age = 26 WHERE name = '小明';
-- 删除
DELETE FROM users WHERE id = 1;表关系
SQL
-- 一对多:一个用户有多篇文章
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title VARCHAR(200),
content TEXT,
user_id INTEGER REFERENCES users(id) -- 外键
);
-- 多对多:文章和标签
CREATE TABLE post_tags (
post_id INTEGER REFERENCES posts(id),
tag_id INTEGER REFERENCES tags(id),
PRIMARY KEY (post_id, tag_id)
);JOIN 查询
SQL
-- INNER JOIN:查询文章及作者名
SELECT posts.title, users.name AS author
FROM posts
JOIN users ON posts.user_id = users.id;
-- LEFT JOIN:所有用户及其文章(没有文章的用户也显示)
SELECT users.name, posts.title
FROM users
LEFT JOIN posts ON users.id = posts.user_id;🐍索引与性能
WHERE、JOIN、ORDER BY 用到的列建索引,比如 CREATE INDEX idx_posts_user ON posts(user_id)。索引能加速查询,但会减慢写入,因为要维护索引树。别过度索引,只给高频查询条件加就行。EXPLAIN ANALYZE 可以看查询执行计划。
ℹ️Python 操作数据库
Python 里别手写 SQL 字符串拼接,有 SQL 注入风险。用 ORM,比如 Django ORM、SQLAlchemy。ORM 就是用 Python 对象操作数据库,自动做参数化查询。
选择题
以下哪个 SQL 语句用于查询数据?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
穿透是反复查「根本不存在」的数据,用布隆过滤器或缓存空值挡;击穿是某个热点 key 过期瞬间大量请求压向数据库,用互斥重建或逻辑过期;雪崩是大批 key 同时过期,给 TTL 加随机抖动。缓存与库的一致性常用「先更新数据库、再删除缓存」,并靠重试/订阅补偿。
挑战任务
SQL 练习
简单+50 XP
查询年龄大于18的用户姓名和邮箱
SQL 练习
Python 0%
1 个测试用例
课后作业
设计博客数据库
中等+30 XP
设计博客系统的数据库表:users、posts、comments、tags,写出 CREATE TABLE 语句和关系。
设计博客数据库
Python 0%
1 个测试用例