Chapter 01

关系数据库基础

理解什么是数据库、关系模型的诞生、核心术语与 SQL/NoSQL 对比

1.1 数据库是什么

在没有数据库之前,应用程序把数据直接存储为文本文件或 CSV 文件。这种方式在数据量小时尚可接受,但一旦数据量增长、多个程序同时访问、需要快速检索特定记录时,问题就会接踵而至。

📁

文件存储的问题 数据冗余重复;多用户并发写入会损坏数据;没有统一查询接口;无法高效检索(只能逐行扫描);没有权限控制。

🗄️

数据库解决了什么 统一存储与访问接口;并发控制(多人同时读写不冲突);索引快速检索;权限管理;数据完整性约束。

DBMS — 数据库管理系统

DBMS(Database Management System,数据库管理系统) 是管理数据库的软件层。我们日常说的 MySQL、PostgreSQL、SQLite 本质上都是 DBMS。它负责:

1.2 关系模型的诞生

1970 年,IBM 研究员 E.F. Codd 发表论文《A Relational Model of Data for Large Shared Data Banks》,提出了关系模型。他用数学中的"集合论"和"一阶谓词逻辑"为数据库奠定了严格的理论基础。

📜

关系代数核心操作(了解即可) 选择(σ,相当于 WHERE)、投影(π,相当于 SELECT 列)、连接(⋈,相当于 JOIN)、并(∪,相当于 UNION)、差(−)、笛卡尔积(×)。这些数学操作构成了 SQL 语言的理论基础。

关系模型的核心思想是:将数据组织成二维表格(关系),通过表之间的关联(外键)描述现实世界的联系,并用声明式的查询语言(SQL)操作数据,而不是命令式地描述"怎么找数据"。

1.3 核心术语

用 users 表直观理解术语

id (主键) username email created_at
1alicealice@example.com2024-01-15
2bobbob@example.com2024-01-20
3carolcarol@example.com2024-02-01

1.4 SQL vs NoSQL 对比

关系型数据库并非万能,不同的数据模型适合不同的业务场景:

类型代表产品数据模型优势适用场景
关系型 MySQL, PostgreSQL, SQLite, Oracle 二维表格,严格 Schema ACID 事务、强一致性、复杂 JOIN 查询、成熟生态 电商订单、金融系统、ERP、绝大多数 Web 后端
文档型 MongoDB, CouchDB JSON/BSON 文档,灵活 Schema 灵活嵌套结构、Schema 可变、横向扩展容易 内容管理、用户画像、结构多变的数据
键值型 Redis, DynamoDB Key → Value 哈希 极高读写性能(内存级)、简单水平扩展 缓存、Session 存储、计数器、排行榜
列式 Cassandra, HBase 列族(Column Family) 海量数据写入、按列聚合分析高效 时序数据、日志分析、物联网数据
图数据库 Neo4j, Amazon Neptune 节点 + 边(图结构) 关系遍历高效、多跳关系查询 社交关系、知识图谱、推荐系统
💡

实际项目中常组合使用 典型架构:PostgreSQL 存储核心业务数据 + Redis 做缓存 + Elasticsearch 做全文搜索。学好 SQL 是基础,它是最通用、就业市场需求最大的技能。

1.5 MySQL 安装与连接

Mac — Homebrew 安装

# 安装 Homebrew(如果尚未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 MySQL 8
brew install mysql

# 启动 MySQL 服务
brew services start mysql

# 安全初始化(设置 root 密码、删除匿名用户)
mysql_secure_installation

# 连接到 MySQL
mysql -u root -p

Windows — 安装包方式

  1. 访问 dev.mysql.com/downloads/installer/ 下载 MySQL Installer
  2. 选择 "Developer Default" 安装类型,包含 MySQL Server、Workbench、Shell
  3. 按向导设置 root 密码,选择 "Use Legacy Authentication Method"(兼容性好)
  4. 安装完成后在 MySQL Shell 或命令提示符中连接:
-- Windows 命令提示符
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p

MySQL 连接后的基本命令

-- 查看所有数据库
SHOW DATABASES;

-- 选择数据库
USE mydb;

-- 查看当前数据库中所有表
SHOW TABLES;

-- 查看表结构
DESCRIBE users;

-- 查看 MySQL 版本
SELECT VERSION();

1.6 PostgreSQL 安装与连接

Mac — Homebrew 安装

# 安装 PostgreSQL 16
brew install postgresql@16

# 启动服务
brew services start postgresql@16

# 将 psql 加入 PATH(按照 brew 输出的提示)
echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# 连接(默认用当前系统用户名登录,无需密码)
psql postgres

Windows — 安装包方式

  1. 访问 postgresql.org/download/windows/ 下载 EnterpriseDB 安装包
  2. 安装时设置 postgres 超级用户密码,默认端口 5432
  3. 安装完成后使用 psql 命令行工具连接:
# 连接到默认数据库
psql -U postgres -h localhost

psql 常用元命令

\l          -- 列出所有数据库(等同于 MySQL 的 SHOW DATABASES)
\c mydb     -- 切换到 mydb 数据库
\dt         -- 列出当前数据库的所有表
\d users    -- 查看 users 表结构(列、类型、索引、约束)
\du         -- 列出所有用户/角色
\timing     -- 开关查询耗时显示
\q          -- 退出 psql

1.7 SQL 语句分类

SQL 语句按功能分为四大类,理解分类有助于系统学习:

分类全称主要语句作用
DDL Data Definition Language
数据定义语言
CREATE ALTER DROP TRUNCATE 定义和管理数据库结构(表、索引、视图等)
DML Data Manipulation Language
数据操作语言
SELECT INSERT UPDATE DELETE 对表中数据进行增、删、改、查
DCL Data Control Language
数据控制语言
GRANT REVOKE 管理用户权限(谁能读、写、执行什么)
TCL Transaction Control Language
事务控制语言
BEGIN COMMIT ROLLBACK SAVEPOINT 控制事务的开始、提交、回滚
SQL-- DDL:定义结构
CREATE TABLE users (id INT PRIMARY KEY);
ALTER TABLE users ADD COLUMN email VARCHAR(255);
DROP TABLE users;

-- DML:操作数据
INSERT INTO users (id, email) VALUES (1, 'a@b.com');
SELECT * FROM users WHERE id = 1;
UPDATE users SET email = 'new@b.com' WHERE id = 1;
DELETE FROM users WHERE id = 1;

-- DCL:权限管理
GRANT SELECT, INSERT ON users TO 'readonly_user';
REVOKE INSERT ON users FROM 'readonly_user';

-- TCL:事务控制
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
⚠️

SQL 不区分大小写,但惯例大写关键字 SELECTselect 效果相同,但大写关键字是业界惯例,可以让 SQL 语句更易读。本教程统一使用大写关键字。