MySQL数据库基础 — 完整知识点复习资料


整合来源:教案 + 9章PPT课件 适用考试:2026年7月3日(下周五) 使用方法:逐单元阅读,重点命令务必手写默写!

1. 认识数据库

1.1 数据管理技术发展阶段(填空/选择高频)

数据管理技术经历了三个阶段:

  1. 人工管理阶段 — 没有专用软件,数据面向应用,一组数据只能对应一个程序
  2. 文件系统阶段 — 有三大约束:数据冗余性数据不一致性数据联系弱
  3. 数据库系统阶段 — 数据可共享、冗余低、独立性高

填空:数据管理技术经历了人工管理、文件系统数据库系统 三个阶段。

1.2 三种基本数据模型(选择高频)

模型 数据结构 说明
层次模型 树形结构 按层次组织数据
网状模型 无向图 复杂网状结构
关系模型 二维表 MySQL使用的模型

填空:按照数据结构的类型来命名,逻辑模型分为 层次模型、网状模型和 关系模型

1.3 关系模型核心概念

  • 二维表 = 关系
  • = 记录(元组)
  • = 字段(属性)
  • 主键 = 唯一标识一条记录
  • 外键 = 引用其他表主键

1.4 实体间的三种联系(填空高频)

实体之间的联系可抽象为三类:一对一(1:1)一对多(1:n)多对多(m:n)

1.5 数据库的特点

数据库系统的特点:

  • 数据共享
  • 数据冗余低 ✅(不是高!)
  • 数据独立性高
  • 数据完整性

选择题陷阱:数据冗余很高 ❌ 不是数据库特点

1.6 数据不一致的根本原因

数据冗余 — 冗余导致更新异常,产生数据不一致

1.7 数据库 vs DBMS vs DBS

概念 全称 含义
DB Database 数据库 — 数据的集合
DBMS DataBase Management System 数据库管理系统
DBS Database System 数据库系统 — 包含DB + DBMS + 应用系统 + DBA + 用户

1.8 MySQL简介

  • 关系型数据库管理系统(RDBMS)
  • 瑞典MySQLAB公司开发,现并入Oracle旗下
  • 特点:体积小、速度快、成本低、开放源码
  • 广泛用于中小型网站
  • 默认端口:3306
  • 常用图形管理工具:Navicat for MySQL

1.9 SQL语言

  • 全称:Structured Query Language(结构化查询语言)
  • 1974年由Boyce和Chambedin提出,原名SEQUEL
  • 1976年IBM优化为SEQUEL2,即SQL
  • 四大功能:数据查询、数据操纵、数据定义、数据控制
  • 主要特点:综合统一、高度非过程化、面向集合、语言简洁

1.10 数据库分类

类型 说明 代表
关系型(SQL/RDBMS) ACID准则 Oracle、MySQL、SQL Server
非关系型(NoSQL) Key-value存储,最终一致性 MongoDB、Redis、Elasticsearch
NewSQL SQL的ACID + NoSQL的可扩展性

2. 数据库设计

2.1 E-R图(实体-联系图)

  • E-R图用于建立数据库的 概念模型
  • E-R图三要素:
要素 图形 说明
实体 矩形 客观存在的事物
属性 椭圆 实体的特征,主键加斜线标记
联系 菱形 实体间关联,标注1:1、1:n、m:n

2.2 E-R图设计步骤

  1. 收集信息 — 了解业务需求
  2. 标识对象 — 确定实体集
  3. 标识每个对象的属性 — 确定属性
  4. 标识对象之间的关系 — 确定联系类型
  5. 绘制局部E-R图 — 针对每一用户
  6. 综合生成总体E-R图 — 去掉冗余,同名实体只出现一次

2.3 三种联系的E-R图表示

1:1 联系(一对一):

  • 例:院长与学院、主任与系

1:n 联系(一对多):

  • 例:仓库与商品、学院与教师

m:n 联系(多对多):

  • 例:教师与课程、读者与图书

2.4 E-R图转关系模型(核心考点)

1:1 联系转换(三种方法)

方案1:把A的主键加入B 方案2:把B的主键加入A 方案3:建立第三个关系(含双方主键+联系属性)

1:n 联系转换

把“一方”的主键纳入“n方”的关系中,同时把联系的属性也一并纳入

m:n 联系转换

必须对“联系”单独建立一个关系 该关系包含双方实体集的主关键字 + 联系属性

试卷设计题示例:仓库(仓库号,地点,面积) — 商品(商品号,商品名,价格) 的1:n转换 方案1(三表拆分): 仓库、商品、存放(仓库号,商品号,数量) 方案2(合并到多方): 仓库、商品(商品号,商品名,价格,数量,仓库号)

2.5 数据库规范化(范式理论)

范式 要求 核心思想
1NF 每列不可再分(原子性) 消除复合字段
2NF 每列都依赖完整主键 消除部分函数依赖,一个表只描述一件事
3NF 每列直接依赖主键,不传递依赖 消除传递函数依赖

规范化实例:建筑公司工资系统 原始单表 → 工程表 + 员工表 + 项目工时表 → 再加职务表(消除传递依赖)

课堂练习:学生成绩系统 A同学设计(单表):学号、姓名、年龄、课程名称、成绩、学分 → 大量冗余 B同学设计(三表):学生表 + 课程表 + 成绩表 → 节省空间

规范化和性能的关系:为商业目标,有时性能比规范化更重要,可适度反规范化


3. 数据定义(DDL)

📌 三剑客:CREATE / ALTER / DROP

3.1 数据库操作

CREATE DATABASE 数据库名;                          -- 创建数据库
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;  -- 指定字符集
DROP DATABASE [IF EXISTS] 数据库名;                -- 删除数据库
SHOW DATABASES;                                    -- 查看所有数据库
USE 数据库名;                                      -- 切换当前数据库
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集; -- 修改字符集

3.2 表操作(三剑客)

CREATE TABLE 表名 (列定义...);    -- 创建表
ALTER TABLE 表名 ...;             -- 修改表结构
DROP TABLE [IF EXISTS] 表名;     -- 删除表(表+数据+约束+索引全删)

⚠️ 选择题陷阱:

  • DELETE TABLE ❌ 不存在此命令
  • MODIFY TABLE ❌ 不存在此命令
  • CHANGE TABLE ❌ 不存在此命令
  • 删除表用 DROP TABLE
  • 修改表结构用 ALTER TABLE

3.3 ALTER TABLE 常用操作

-- 添加列
ALTER TABLE 表名 ADD 列名 数据类型 [FIRST | AFTER 列名];

-- 删除列
ALTER TABLE 表名 DROP COLUMN 列名;

-- 修改列名
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型;

-- 修改列类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;

-- 添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(列名);

-- 添加唯一索引
ALTER TABLE 表名 ADD UNIQUE(列名);

-- 添加普通索引
ALTER TABLE 表名 ADD INDEX 索引名(列名);

-- 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

-- 删除索引
ALTER TABLE 表名 DROP INDEX 索引名;

-- 重命名表
ALTER TABLE 表名 RENAME TO 新表名;

删除属性“年龄”的正确写法:ALTER TABLE s DROP COLUMN age;

3.4 MySQL数据类型速记

类型 说明 示例
char(n) 定长字符 char(8)
varchar(n) 变长字符 varchar(10)
text 文本
BLOB 二进制大对象(存图片/音频)
int 整型 INT(3)
float(M,D) 浮点数 float(5,2) — M总位数,D小数位
decimal(M,D) 精确小数 decimal(8,4)
date 日期 1999-06-17
time 时间 12:30:43
datetime 日期+时间 1999-06-17 12:30:43

定义字段时,int 4 是错误的写法 ❌

3.5 MySQL字符型数据类型(选择高频)

主要包括:charvarchartext

⚠️ int是数值型,不是字符型!

3.6 数据完整性(四大类)

完整性类型 约束方法 说明
实体完整性 PRIMARY KEY、UNIQUE 每行唯一标识
域完整性 数据类型、CHECK、DEFAULT、NOT NULL 取值符合范围
参照完整性 FOREIGN KEY 表间引用关系
用户定义完整性 存储过程、触发器 特定业务规则

3.7 约束类型速记

约束 关键字 说明
主键 PRIMARY KEY 唯一且非空,一个表只能有一个
非空 NOT NULL 不允许为空
唯一 UNIQUE 禁止输入重复值
默认 DEFAULT 默认值
检查 CHECK(条件) 限制取值范围
外键 FOREIGN KEY 引用另一表的主键

3.8 外键参照动作

动作 说明
CASCADE 主表修改/删除,子表同步变更
RESTRICT 子表有数据时,禁止主表删除/修改
SET NULL 主表变更后,外键列置空
NO ACTION 同RESTRICT

默认动作:RESTRICT


4. 数据操作(DML)

📌 三命令:INSERT / UPDATE / DELETE

4.1 INSERT — 插入数据(三种写法)

-- 写法1:指定列名(推荐)
INSERT INTO 表名(列1,列2,列3) VALUES(值1,值2,值3);

-- 写法2:按顺序写全列
INSERT INTO 表名 VALUES(值1,值2,值3);

-- 写法3:SET语法(MySQL特有)
INSERT INTO 表名 SET 列1=值1, 列2=值2;

-- 多行插入
INSERT INTO 表名 VALUES(值1,值2),(值3,值4),(值5,值6);

4.2 UPDATE — 修改数据

-- 单表更新(必写WHERE,否则全表更新!)
UPDATE 表名 SET 列1=新值1, 列2=新值2 WHERE 条件;

-- 自增更新
UPDATE sell SET 数量=数量*1.1 WHERE 产品编号='103';

-- 多表联合更新
UPDATE 表1, 表2 SET 表1.=WHERE 表1.外键=表2.主键;

⚠️ SET 后面跟的是 列名=新值,不是表名! 错误写法:UPDATE grade=85 WHERE ...

4.3 DELETE — 删除数据

-- 按条件删除
DELETE FROM 表名 WHERE 条件;

-- 删除全部(不用WHERE则删除所有行)
DELETE FROM 表名;

4.4 TRUNCATE TABLE

TRUNCATE TABLE 表名;  -- 清空全表,不可回滚,重置自增主键

DELETE vs TRUNCATE对比:

  • DELETE:逐行删除,可回滚,保留表结构,自增计数不变
  • TRUNCATE:释放数据页,不可回滚,重置自增主键,速度更快

4.5 命令对比速记

命令 作用对象 用途
CREATE 数据库/表/视图 创建对象
DROP 数据库/表/视图 删除整个对象
ALTER 修改表结构
INSERT 插入数据行
UPDATE 修改数据行
DELETE 删除数据行

5. 数据查询(DQL)

📌 SELECT 是SQL中最重要的语句!

5.1 SELECT 完整语法结构(注意顺序!)

SELECT [DISTINCT] 列名 [AS 别名], ...
FROM 表名 [AS 别名]
[WHERE 行过滤条件]
[GROUP BY 分组列]
[HAVING 分组后过滤]
[ORDER BY 排序列 [ASC|DESC]]
[LIMIT 偏移量, 行数];

执行顺序: FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

5.2 列操作

-- 选择指定列
SELECT 姓名, 年龄 FROM student;

-- 选择所有列
SELECT * FROM student;

-- 列别名
SELECT 姓名 AS name, 年龄 AS age FROM student;
SELECT 姓名 AS 'Number of Student' FROM student;  -- 含空格需引号

-- 计算列
SELECT 书名, 数量*单价 AS 金额 FROM book;

-- 去重
SELECT DISTINCT 图书类别 FROM book;

5.3 CASE表达式(替换查询结果)

SELECT 图书编号, 书名,
       CASE
           WHEN 数量 IS NULL THEN '尚未进货'
           WHEN 数量 < 5 THEN '需进货'
           WHEN 数量 >= 5 AND 数量 <= 50 THEN '库存正常'
           ELSE '库存积压'
       END AS 库存
FROM book;

5.4 WHERE 条件查询

-- 等值查询
SELECT 姓名, 年龄 FROM student WHERE 性别 = '女';

-- BETWEEN ... AND(闭区间,含边界)
SELECT * FROM SG WHERE Grade BETWEEN 60 AND 80;

-- IN(值是否在集合中)
SELECT * FROM book WHERE 出版社 IN ('高等教育出版社', '北京大学出版社');

-- LIKE 模糊查询(填空高频)
-- % 匹配任意多个字符,_ 匹配单个字符
SELECT * FROM 表名 WHERE 列名 LIKE '李%';       -- 姓李的
SELECT * FROM 表名 WHERE 列名 LIKE '%6_';       -- 倒数第二位为6
SELECT * FROM 表名 WHERE 列名 LIKE '%_%' ESCAPE '#';  -- 含下划线

-- 空值判断(不能用= NULL!)
SELECT * FROM 表名 WHEREIS NULL;
SELECT * FROM 表名 WHEREIS NOT NULL;
SELECT * FROM 表名 WHERE<=> NULL;  -- 特殊等于(含NULL)

5.5 逻辑运算符

运算符 符号 说明
AND AND / && 且 — 都为真才真
OR OR / || 或 — 任一为真就真
NOT NOT / ! 非 — 取反
XOR XOR / ^ 异或 — 不同为真

优先级:NOT > AND > OR

5.6 聚合函数(必记5个)

函数 功能 示例
COUNT() 计数 COUNT(*) 总行数,COUNT(列) 非NULL行数
MAX() 最大值 SELECT MAX(grade) FROM SG;
MIN() 最小值 SELECT MIN(grade) FROM SG;
SUM() 求和 SELECT SUM(数量) FROM sell;
AVG() 平均值 SELECT AVG(成绩) FROM SG;

聚合函数只能用于:SELECT、HAVING、ORDER BY LIMIT不用于分组!(判断题常考)

5.7 GROUP BY 分组

-- 按性别分组,计算平均年龄
SELECT 性别, AVG(年龄) FROM student GROUP BY 性别;

-- 按出版社统计图书平均单价、总金额
SELECT 出版社, AVG(单价), SUM(数量*单价) FROM book GROUP BY 出版社;

-- 带ROLLUP生成小计
SELECT 图书类别, 出版社, SUM(数量) FROM book
GROUP BY 图书类别, 出版社 WITH ROLLUP;

5.8 HAVING 分组过滤

-- HAVING过滤分组后的结果(可用聚合函数)
SELECT 用户号, AVG(订购册数) FROM sell
GROUP BY 用户号 HAVING AVG(订购册数) > 5;

-- WHERE vs HAVING:WHERE过滤原始行,HAVING过滤分组后的聚合结果
SELECT 用户号, AVG(订购册数) FROM sell
WHERE 订购册数 > 5
GROUP BY 用户号 HAVING COUNT(*) > 2;

5.9 ORDER BY 排序

-- 降序
SELECT * FROM student ORDER BY 年龄 DESC;

-- 升序(默认,可省略ASC)
SELECT * FROM student ORDER BY 年龄 ASC;

-- 多字段排序
SELECT * FROM 借阅表 ORDER BY 状态, 借阅日期 DESC;

5.10 LIMIT 限制行数

LIMIT 5;          -- 返回前5行
LIMIT 3, 5;       -- 从第4行开始返回5行(偏移量从0开始)
LIMIT 5 OFFSET 3; -- 同上(PostgreSQL兼容语法)

5.11 多表连接查询

-- 等值连接(WHERE方式)
SELECT 姓名, 成绩 FROM student, SG
WHERE student.学号 = SG.学号
ORDER BY 成绩 DESC;

-- INNER JOIN(内连接:仅返回匹配记录)
SELECT 姓名, 书名 FROM book
INNER JOIN sell ON book.图书编号 = sell.图书编号;

-- LEFT JOIN(左外连接:左表全部保留,右表无匹配填NULL)
SELECT 条码, 位置, 读者编号 FROM 库存
LEFT JOIN 借阅 ON 库存.条码 = 借阅.条码;

-- RIGHT JOIN(右外连接:右表全部保留,左表无匹配填NULL)

-- 多表连接
SELECT 姓名, 书名, 借阅日期 FROM 读者
JOIN 借阅 ON 读者.编号 = 借阅.读者编号
JOIN 图书 ON 借阅.条码 = 图书.条码;

-- USING子句(列名相同时)
SELECT DISTINCT 姓名 FROM members JOIN sell USING (用户号);

5.12 子查询

-- IN子查询
SELECT * FROM sell WHERE 用户号 IN
    (SELECT 用户号 FROM members WHERE 姓名 = '张三');

-- 比较子查询
SELECT * FROM book WHERE 单价 > ALL
    (SELECT 单价 FROM book WHERE 图书类别 = '网页设计');

-- EXISTS子查询
SELECT * FROM members WHERE EXISTS
    (SELECT * FROM sell WHERE sell.用户号 = members.用户号);

5.13 UNION 联合查询

-- 自动去重
SELECT 图书编号, 订购册数 FROM sell WHERE 用户号 = 'C0138'
UNION
SELECT 图书编号, 数量 FROM book WHERE 图书编号 = 'TP.2525';

-- 保留重复
SELECT ... UNION ALL SELECT ...;

6. 数据视图

6.1 视图概念

  • 视图是一个虚表 — 只存定义,不存数据
  • 基本表或者视图中导出
  • 可以像表一样被查询、修改、删除
  • 优点:简化查询、屏蔽复杂性、简化权限管理、便于数据共享

6.2 视图相关命令(必记)

-- 创建视图
CREATE VIEW 视图名 [(列别名)] AS SELECT 语句
    [WITH [CASCADED | LOCAL] CHECK OPTION];

-- 修改视图
ALTER VIEW 视图名 [(列别名)] AS SELECT 语句;

-- 删除视图
DROP VIEW [IF EXISTS] 视图名1, 视图名2;

6.3 WITH CHECK OPTION

-- 通过视图插入/修改数据必须满足视图WHERE条件
CREATE VIEW jsj_book AS
SELECT * FROM book WHERE 图书类别 = '计算机'
WITH CHECK OPTION;

-- 尝试插入非计算机类图书会报错
INSERT INTO jsj_book VALUES('TP.0837','文学','Office应用实例',...);
-- ❌ 报错:违反CHECK OPTION

6.4 不可更新视图(包含以下任一结构)

聚合函数、DISTINCT、GROUP BY、ORDER BY、HAVING、UNION、多表JOIN、子查询等

6.5 通过视图操作数据

-- 通过视图插入(视图依赖多个表时不可插入)
INSERT INTO jsj_book VALUES(...);

-- 通过视图修改
UPDATE jsj_book SET 单价 = 单价 * 0.95;

-- 通过视图删除
DELETE FROM jsj_book WHERE 出版社 = '人民邮电出版社';

6.6 视图相关选择题要点

  • 视图是从 基本表或者视图 中导出的 ✅
  • 视图名称 不得 与该用户拥有的任何表的名称相同 ✅
  • 可以 像查询表一样查询视图(判断题:说法“不可以”是错误的) ✅

7. 索引和分区

7.1 索引的作用

  • 提高查询的检索性能(核心目的)
  • 可以加快表之间连接的速度
  • 类似书的目录,通过索引找到特定值,然后跟随指针到目标行
  • MySQL自动为主键创建索引

7.2 索引的分类

类型 说明 创建方式
主键索引 唯一+非空,一个表只能有一个 PRIMARY KEY
普通索引 无唯一性限制 INDEX
唯一索引 不允许重复值 UNIQUE
全文索引 TEXT/VARCHAR文本检索 FULLTEXT(仅MyISAM)

7.3 创建索引(三种方式)

-- 方式1:CREATE INDEX(已有表)
CREATE INDEX 索引名 ON 表名(列名[(长度)] [ASC|DESC]);
CREATE UNIQUE INDEX 索引名 ON 表名(列名);

-- 方式2:ALTER TABLE(已有表)
ALTER TABLE 表名 ADD INDEX 索引名(列名);
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
ALTER TABLE 表名 ADD UNIQUE(列名);

-- 方式3:建表时直接定义
CREATE TABLE 表名(
    列1 类型 PRIMARY KEY,
    列2 类型,
    INDEX 索引名(列2),
    UNIQUE(列3)
);

7.4 删除索引

DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
ALTER TABLE 表名 DROP PRIMARY KEY;

7.5 索引设计原则

应该创建 ✅ 不应该创建 ❌
WHERE子句中出现频率较高的列 具有很多NULL值的列
用于连接的外键列 记录较少的基本表
经常排序/分组的列 需要更新频繁的表

7.6 索引相关选择题要点

  • 一个表 只能 建立 一个 主键索引(多选1个)✅
  • 索引可以建立在 一个或多个 字段上 ✅
  • 不能 使用 ADD INDEX 语句创建索引(错误说法)✅
  • 快速查出某教师所讲授的课程 → 在 课程表 上按 教师编号 建索引 ✅

7.7 数据库分区(四种类型)

类型 说明 语法
RANGE 按连续数值区间分区 PARTITION BY RANGE(表达式)
LIST 按离散枚举值分区 PARTITION BY LIST(表达式)
HASH 按表达式哈希均匀分配 PARTITION BY HASH(表达式) PARTITIONS n
KEY 基于主键哈希 PARTITION BY KEY() PARTITIONS n

7.8 分区管理

-- 增加分区
ALTER TABLE 表名 ADD PARTITION (PARTITION p3 VALUES IN (2));

-- 重新分区
ALTER TABLE 表名 REORGANIZE PARTITION p2,p3 INTO (PARTITION m VALUES IN (0,2));

-- 删除分区
ALTER TABLE 表名 DROP PARTITION p1;

-- 移除分区(保留表结构)
ALTER TABLE 表名 REMOVE PARTITIONING;

8. 数据库编程

8.1 常量与变量

类型 说明 示例
字符串常量 单引号或双引号 'hello'
数值常量 整数/浮点数 100, 3.14
日期时间常量 单引号括起 '1999-06-17', '12:30:43'
NULL值 无数据,≠ 0 或空字符串 NULL
用户变量 @开头 @name='王林'
系统变量 @@开头 @@VERSION, CURRENT_DATE

8.2 流程控制语句

IF语句

IF 条件1 THEN
    语句序列1;
[ELSEIF 条件2 THEN 语句序列2;]
[ELSE 语句序列e;]
END IF;

CASE语句

-- 格式1:表达式匹配
CASE 表达式
    WHEN 值1 THEN 语句1;
    WHEN 值2 THEN 语句2;
    ELSE 语句e;
END CASE;

-- 格式2:条件判断
CASE
    WHEN 条件1 THEN 语句1;
    WHEN 条件2 THEN 语句2;
    ELSE 语句e;
END CASE;

循环语句

类型 语法 说明
WHILE WHILE 条件 DO ... END WHILE 先判断后执行
REPEAT REPEAT ... UNTIL 条件 END REPEAT 先执行后判断
LOOP [标号:] LOOP ... END LOOP [标号] 需LEAVE退出

8.3 存储过程(必记)

-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE 过程名 ([IN/OUT/INOUT 参数 类型])
BEGIN
    -- 局部变量声明(必须在开头)
    DECLARE 变量名 类型 [DEFAULT 值];
    -- SQL语句
    ...
END$$
DELIMITER ;

-- 调用存储过程(必记命令:CALL)
CALL 过程名(参数);

-- 删除存储过程
DROP PROCEDURE [IF EXISTS] 过程名;

📌 DELIMITER命令:存储过程体有多条SQL语句,需临时改结束符为$$

8.4 存储函数(必记)

-- 创建存储函数
DELIMITER $$
CREATE FUNCTION 函数名([参数 类型])
RETURNS 类型
BEGIN
    RETURN 表达式;  -- 必须包含RETURN
END$$
DELIMITER ;

-- 调用存储函数(SELECT调用)
SELECT 函数名(参数);

-- 删除存储函数
DROP FUNCTION 函数名;

存储过程 vs 存储函数:

  • 存储函数 必须 有RETURN语句
  • 存储函数 不能 用CALL调用
  • 存储函数 没有 OUT参数

8.5 触发器(必记)

-- 创建触发器
DELIMITER $$
CREATE TRIGGER 触发器名 BEFORE/AFTER INSERT/UPDATE/DELETE
ON 表名 FOR EACH ROW
BEGIN
    -- 使用NEW.列名(新行)或OLD.列名(旧行)
    ...
END$$
DELIMITER ;

-- 删除触发器(必记命令:DROP TRIGGER)
DROP TRIGGER 触发器名;

⚠️ 删除触发器用 DROP TRIGGER(不是 DELETE / REMOVE / DISABLE)

8.6 事件(必记)

-- 创建事件
CREATE EVENT 事件名
ON SCHEDULE EVERY 1 MINUTE
STARTS 时间点 [ENDS 时间点]
DO
    BEGIN
        SQL语句;
    END;

-- 管理事件
SET GLOBAL EVENT_SCHEDULER = 1;       -- 开启调度器
ALTER EVENT 事件名 ENABLE/DISABLE;    -- 启用/禁用
DROP EVENT 事件名;                     -- 删除
SHOW EVENTS;                           -- 查看事件

8.7 控制结构速查

结构 关键字 说明
分支 CASE ... END CASE / IF ... END IF 多分支选择
循环 WHILE ... END WHILE / REPEAT ... END REPEAT / LOOP ... END LOOP 循环执行
变量定义 DECLARE 声明局部变量
变量赋值 SET 给变量赋值
函数返回值 RETURN 存储函数返回

9. 数据安全

9.1 用户管理(必记命令)

-- 创建用户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-- 示例:CREATE USER 'Wang'@'localhost' IDENTIFIED BY '123456';

-- 修改密码
SET PASSWORD FOR '用户名'@'主机' = '新密码';

-- 改名
RENAME USER 旧用户名 TO 新用户名;

-- 删除用户
DROP USER '用户名'@'主机';

9.2 权限管理(必记命令)

-- 授权
GRANT 权限1, 权限2 ON 数据库. TO '用户名'@'主机';
-- 示例:GRANT SELECT,INSERT ON LibraryDB.* TO 'user1'@'localhost';

-- 授权并允许传递
GRANT SELECT ON LibraryDB.读者表 TO 'user3'@'localhost' WITH GRANT OPTION;

-- 回收权限
REVOKE SELECT ON LibraryDB.读者表 FROM 'user1'@'localhost';

-- 回收全部权限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM '用户名'@'主机';

9.3 权限层级

层级 说明 语法
列权限 单字段 GRANT UPDATE(列名) ON 表 TO ...
表权限 整张表 GRANT SELECT ON 表 TO ...
库权限 库内所有表 GRANT SELECT ON 库名.* TO ...
全局权限 全部数据库 GRANT CREATE ON *.* TO ...

9.4 GRANT和REVOKE的作用

维护数据库的 安全性(不是完整性!)

9.5 DELETE权限 vs DROP权限

权限 作用
DELETE 允许删除表中的数据行
DROP 允许删除数据库对象(表、库等)
两者 不等价

10. 名词解释速记

英文 中文含义
DBMS 数据库管理系统
SQL 结构化查询语言
E-R图 实体-联系图
DBS 数据库系统
Primary Key 主键
Foreign Key 外键
Character Set 字符集
DEFAULT 默认值
1NF 第一范式
UNIQUE INDEX 唯一性索引

11. 备份与恢复

11.1 三种数据安全方案

  1. 数据库备份 — 导出数据或表文件拷贝
  2. 二进制日志 — 记录所有更改数据的语句
  3. 数据库复制 — 主从复制

11.2 文本导出导入

-- 导出数据
SELECT * FROM 表名
INTO OUTFILE 'D:/data.txt'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '?';

-- 导入数据
LOAD DATA INFILE 'D:/data.txt'
INTO TABLE 表名
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '?';

11.3 mysqldump备份

mysqldump -u root -p 数据库名 > file.sql    # 备份
mysql -u root -p 数据库名 < file.sql         # 恢复

11.4 二进制日志管理

-- 清理日志
RESET MASTER;                              -- 清除所有日志
PURGE BINARY LOGS BEFORE '2026-01-01';     -- 删除指定时间前的日志

11.5 事务(ACID)

特性 说明
原子性(A) 事务是不可分割的最小单元
一致性(C) 事务前后数据保持一致
隔离性(I) 事务间互不干扰
持久性(D) 提交后永久保存
SET @@AUTOCOMMIT = 0;    -- 关闭自动提交
START TRANSACTION;        -- 开始事务
-- SQL操作...
COMMIT;                   -- 提交
ROLLBACK;                 -- 回滚

附录A:判断题高频考点速记

说法 正误 说明
数据库系统减少了数据冗余
关系数据库中的关键字是很关键的字段 关键字是能唯一标识元组的属性
规范化的关系至少满足四范式 不需要,三范式即可
MySQL是关系数据库系统
不可以像查询表一样查询视图 可以!
可以用CREATE USER添加用户并设密码
LIMIT子句用于分组输出 LIMIT用于限制行数
一个表的主键只能是一个字段 可以是复合主键
存储图形图像用BLOB
事务日志可恢复数据库

附录B:考试题型及分值分布

题型 分值 重点
填空题 ~20分 数据管理三阶段、数据模型、联系类型、SQL命令
选择题 ~60分 概念理解、命令辨析、数据类型、约束
判断题 ~10分 易混淆概念
名词解释 ~20分 10个英文术语
简答题/写SQL ~30分 创建表、增删改查、授权
设计题 ~40分 E-R图转关系模型、综合SQL
机试操作 ~100分 建库建表、索引、SQL编写、用户授权

考前最后提醒

  1. 填空题:注意区分 CREATE/DROP/ALTER、INSERT/UPDATE/DELETE
  2. 选择题:注意陷阱 — DELETE TABLE ❌、DROP TABLE ✅;LIMIT不分组 ✅;int 4 ❌
  3. 写SQL题:命令拼写、WHERE不能漏、FROM不能漏、引号要用对
  4. 授权题:注意 '用户名'@'localhost' 的格式
  5. 设计题:1:n 联系可以三表拆分,也可以合并到多方
  6. 名词解释:10个名词全部要背
  7. E-R图转关系模型:1:1三种方法、1:n合并到多方、m:n必须新建中间表

祝考试顺利! 🎯