Appearance
章节1:数据库基础与SQL入门
一、学习目标
完成本章学习后,你将能够:
- 理解关系型数据库核心概念与三大范式设计原则
- 独立安装 MySQL 并配置 Navicat / DBeaver 客户端工具
- 使用 DDL 语句创建、修改和删除数据库及表结构
- 使用 DML 语句对表中数据进行增、删、改操作
- 使用 DQL 语句完成单表查询和条件过滤
二、核心知识点
2.1 关系型数据库原理与三范式
定义
关系型数据库(RDBMS)采用 表(Table) 作为核心数据组织方式,表与表之间通过 外键(Foreign Key) 建立关联。数据以 行(记录) 和 列(字段) 的二维结构存储。
三大范式(3NF) 是数据库设计的规范准则:
| 范式 | 核心要求 | 通俗理解 |
|---|---|---|
| 1NF(第一范式) | 每列不可再分,确保原子性 | 字段不能再拆成多个值 |
| 2NF(第二范式) | 满足1NF,且非主键列完全依赖于主键 | 每一行有一个唯一标识 |
| 3NF(第三范式) | 满足2NF,且非主键列不传递依赖于主键 | 数据不冗余存储 |
语法 / 设计原则
sql
-- 违反1NF:address 列包含多个值
CREATE TABLE student_wrong (
id INT,
name VARCHAR(50),
address VARCHAR(200) -- "北京市海淀区,100084" — 应拆分
);
-- 符合3NF:拆分为学生表与地址表
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE address (
id INT PRIMARY KEY,
student_id INT,
city VARCHAR(50),
zip_code VARCHAR(10),
FOREIGN KEY (student_id) REFERENCES student(id)
);2.2 MySQL 安装与客户端工具
定义
MySQL 是目前最流行的开源关系型数据库管理系统之一。常用图形化客户端:
| 工具 | 特点 |
|---|---|
| Navicat | 商业软件,功能全面,支持可视化建模、备份迁移 |
| DBeaver | 免费开源,跨平台,支持多种数据库,社区活跃 |
安装要点
MySQL Server 安装
- 从 https://dev.mysql.com/downloads/ 下载 MySQL Community Server
- 安装时设置 root 密码,选择默认字符集
utf8mb4 - 配置环境变量
PATH添加 MySQL bin 目录
连接测试
bashmysql -u root -p SHOW DATABASES;DBeaver 连接配置
- 新建连接 → MySQL → 主机
localhost→ 端口3306→ 用户名root→ 输入密码 → 测试连接
- 新建连接 → MySQL → 主机
2.3 DDL — 数据库与表的创建管理
定义
DDL(Data Definition Language) 用于定义数据库对象的创建、修改和删除。
| 命令 | 作用 |
|---|---|
CREATE | 创建数据库或表 |
ALTER | 修改表结构(添加/修改/删除列) |
DROP | 删除数据库或表 |
TRUNCATE | 清空表数据(保留结构) |
语法与示例
sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS school
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE school;
-- 创建表
CREATE TABLE IF NOT EXISTS student (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
name VARCHAR(50) NOT NULL COMMENT '姓名',
gender ENUM('男','女') DEFAULT '男' COMMENT '性别',
age INT DEFAULT 0 COMMENT '年龄',
class_id INT COMMENT '班级ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';
-- 修改表:新增列
ALTER TABLE student ADD COLUMN phone VARCHAR(20) AFTER age;
-- 修改表:修改列类型
ALTER TABLE student MODIFY COLUMN phone VARCHAR(15);
-- 修改表:重命名列
ALTER TABLE student CHANGE COLUMN phone mobile VARCHAR(15);
-- 修改表:删除列
ALTER TABLE student DROP COLUMN mobile;
-- 删除表(谨慎操作)
-- DROP TABLE IF EXISTS student;
-- 清空表
-- TRUNCATE TABLE student;2.4 DML — 数据增删改
定义
DML(Data Manipulation Language) 用于对表中的数据进行增、删、改操作。
| 命令 | 作用 |
|---|---|
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
语法与示例
sql
-- INSERT:插入单条记录
INSERT INTO student (name, gender, age, class_id)
VALUES ('张三', '男', 20, 1);
-- INSERT:插入多条记录
INSERT INTO student (name, gender, age, class_id) VALUES
('李四', '女', 21, 1),
('王五', '男', 19, 2),
('赵六', '女', 22, 2);
-- INSERT:省略列名(需与字段顺序一致)
INSERT INTO student VALUES (NULL, '小明', '男', 18, 1, NOW());
-- UPDATE:更新数据(务必加 WHERE 条件!)
UPDATE student
SET age = 23
WHERE name = '张三';
-- UPDATE:多字段更新
UPDATE student
SET age = age + 1, class_id = 3
WHERE id = 2;
-- DELETE:删除数据(务必加 WHERE 条件!)
DELETE FROM student
WHERE id = 4;
-- DELETE:删除所有数据(保留结构)
-- DELETE FROM student;⚠️ 警告:
UPDATE和DELETE不带WHERE条件会作用于全部行,请在事务中操作或先 SELECT 确认。
2.5 DQL — 单表查询与条件过滤
定义
DQL(Data Query Language) 的核心是 SELECT 语句,用于从表中检索数据。
| 子句 | 作用 |
|---|---|
SELECT | 指定查询的列 |
FROM | 指定查询的表 |
WHERE | 按条件过滤行 |
DISTINCT | 去重 |
AS | 列别名 |
语法与示例
sql
-- 准备数据
USE school;
INSERT INTO student (name, gender, age, class_id) VALUES
('小红', '女', 20, 1),
('小刚', '男', 21, 1),
('大壮', '男', 22, 2),
('小美', '女', 19, 2),
('阿强', '男', 23, 3);
-- 查询所有列
SELECT * FROM student;
-- 查询指定列
SELECT name, age FROM student;
-- 使用别名
SELECT name AS 姓名, age AS 年龄 FROM student;
-- WHERE 条件过滤
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE gender = '女' AND age >= 20;
SELECT * FROM student WHERE class_id IN (1, 2);
SELECT * FROM student WHERE name LIKE '%小%';
SELECT * FROM student WHERE age BETWEEN 18 AND 21;
-- DISTINCT 去重
SELECT DISTINCT class_id FROM student;
-- 去重组合
SELECT DISTINCT gender, class_id FROM student;
-- 空值判断
SELECT * FROM student WHERE phone IS NULL;
-- SELECT * FROM student WHERE phone IS NOT NULL;三、本章小结
| 知识点 | 关键要点 |
|---|---|
| 三范式 | 1NF 列不可分 → 2NF 完全依赖主键 → 3NF 消除传递依赖 |
| DDL | CREATE / ALTER / DROP 操作库和表结构 |
| DML | INSERT 插入 / UPDATE 修改 / DELETE 删除(切记 WHERE!) |
| DQL | SELECT + FROM + WHERE 构成基本查询骨架 |
| 客户端 | Navicat(商业)/ DBeaver(免费)均可连接管理 MySQL |
四、练习
基础练习
- 创建数据库
company,字符集为utf8mb4 - 在
company中创建employee表,包含字段:id(自增主键)、name(非空)、position(职位)、salary(DECIMAL(10,2))、hire_date(DATE) - 插入 5 条员工记录
- 修改第 3 条记录的薪水 +2000
- 查询薪水大于 10000 且职位包含"经理"的员工
- 删除入职时间早于 2020-01-01 的员工
进阶练习
- 设计一个符合 3NF 的订单管理系统数据库(至少包含用户表、商品表、订单表),写出建表 DDL
- 插入模拟数据,查询每个用户的最新一条订单记录