Skip to content

章节1:数据库基础与SQL入门


一、学习目标

完成本章学习后,你将能够:

  1. 理解关系型数据库核心概念与三大范式设计原则
  2. 独立安装 MySQL 并配置 Navicat / DBeaver 客户端工具
  3. 使用 DDL 语句创建、修改和删除数据库及表结构
  4. 使用 DML 语句对表中数据进行增、删、改操作
  5. 使用 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免费开源,跨平台,支持多种数据库,社区活跃

安装要点

  1. MySQL Server 安装

    • https://dev.mysql.com/downloads/ 下载 MySQL Community Server
    • 安装时设置 root 密码,选择默认字符集 utf8mb4
    • 配置环境变量 PATH 添加 MySQL bin 目录
  2. 连接测试

    bash
    mysql -u root -p
    SHOW DATABASES;
  3. DBeaver 连接配置

    • 新建连接 → MySQL → 主机 localhost → 端口 3306 → 用户名 root → 输入密码 → 测试连接

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;

⚠️ 警告UPDATEDELETE 不带 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 消除传递依赖
DDLCREATE / ALTER / DROP 操作库和表结构
DMLINSERT 插入 / UPDATE 修改 / DELETE 删除(切记 WHERE!)
DQLSELECT + FROM + WHERE 构成基本查询骨架
客户端Navicat(商业)/ DBeaver(免费)均可连接管理 MySQL

四、练习

基础练习

  1. 创建数据库 company,字符集为 utf8mb4
  2. company 中创建 employee 表,包含字段:id(自增主键)、name(非空)、position(职位)、salary(DECIMAL(10,2))、hire_date(DATE)
  3. 插入 5 条员工记录
  4. 修改第 3 条记录的薪水 +2000
  5. 查询薪水大于 10000 且职位包含"经理"的员工
  6. 删除入职时间早于 2020-01-01 的员工

进阶练习

  1. 设计一个符合 3NF 的订单管理系统数据库(至少包含用户表、商品表、订单表),写出建表 DDL
  2. 插入模拟数据,查询每个用户的最新一条订单记录

Python 学习资料