学习自测(MySQL系列第一期、第二期)

学习自测(MySQL系列第一期、第二期)

以下十个问题覆盖前两期笔记的核心知识点。请尝试独立回答,检验掌握程度,发现薄弱环节。

  1. 数据分类:请结合具体例子说明结构化数据、半结构化数据和非结构化数据的核心区别。为什么说半结构化数据是"自描述"的?

  2. 数据管理发展:文件系统管理数据阶段相比人工管理阶段有哪些进步?又存在哪些主要缺陷?这些缺陷如何被数据库系统阶段解决?

  3. 关系型数据库核心术语:解释主键、外键、复合键的作用。为什么主键通常使用自增整数类型?请给出一个必须使用复合键的实际场景。

  4. E-R模型与联系类型:设计一个"学生选课"系统的局部E-R图,至少包含学生、课程两个实体以及它们之间的联系。请分别说明实体、属性、联系在图中的表示符号,并判断联系类型属于哪种(1:1, 1:n, m:n)?

  5. 数据库规范化(范式):某张表包含字段(订单ID,商品ID,商品名称,数量,单价,总价),其中主键为(订单ID,商品ID),"商品名称"只依赖于"商品ID","总价"可由"数量×单价"计算得出。请问该表违反了哪几个范式?应如何拆分?

  6. SQL语言分类 :将以下操作归类为 DDL、DML、DQL、DCL 或 TCL:CREATE DATABASEINSERTSELECTGRANTALTER TABLEDELETECOMMITDROP USER

  7. MySQL客户端使用 :写出使用mysql命令行工具连接到远程主机 192.168.1.100 的 3307 端口,用户名为 reporter,密码为 123abc,并直接执行 SHOW DATABASES; 后退出的完整命令。同时说明如何用 mysqladmin 创建一个名为 testdb 的数据库。

  8. 数据库与表的DDL操作:请写出完整的SQL语句完成以下任务(顺序执行):

    • 创建数据库 company,默认字符集为 utf8mb4;
    • 在该库中创建表 employees,包含字段:emp_id(自增主键)、name(非空)、hire_date(日期类型)、salary(精确到两位小数,无符号);
    • employees 表添加一个 email 字段(变长字符串,最大100);
    • salary 字段的类型改为 DECIMAL(12,2)
    • 删除 hire_date 字段。
  9. 数据类型与选择原则:为以下业务场景选择最合适的数据类型,并简要说明理由:

    • 用户年龄(0~150)
    • 商品价格(如 19.99 元)
    • 用户手机号(11位数字)
    • 文章正文(可能超过5000字)
    • 员工状态(在职/离职/休假,三选一)
  10. 字符集与排序规则 :MySQL 8.0 默认字符集是什么?utf8mb4 与旧版 utf8(即 utf8mb3)有何关键区别?排序规则 utf8mb4_0900_ai_ci 中的 aici 分别代表什么含义?什么情况下需要选择 utf8mb4_bin


建议:回答时尽量动手在 MySQL 环境中验证。如有不清楚的地方,可回看第一期和第二期相关章节。后续笔记会继续深入,请保持练习。

自测解析笔记第一期:MySQL系列第一期、第二期详解

本笔记为前两期学习笔记的配套自测题解析。共十题,每题包含:题目回顾、考查知识点、详细解答与分析。建议先独立完成自测,再对照本解析查漏补缺。


题目一:数据分类

题目:请结合具体例子说明结构化数据、半结构化数据和非结构化数据的核心区别。为什么说半结构化数据是"自描述"的?

考查知识点

  • 数据的三种分类及其特征(第一期 §1.1)
  • 半结构化数据的"自描述"含义

详细解答

类型 核心区别 示例
结构化数据 可用二维表逻辑表达,固定格式和有限长度,先有结构后有数据 MySQL 中存储的学生表(学号、姓名、年龄)
半结构化数据 不符合关系型数据模型,但包含标签/标记来分隔语义元素,先有数据后有结构,数据结构与内容混合 JSON、XML、HTML
非结构化数据 没有固定结构,无法用二维表表示,整体存储 音视频文件、图片、二进制文件

"自描述"含义 :半结构化数据中,数据的结构和内容不分离,标签或标记本身描述了数据的含义。例如 JSON 中的 "name":"唐三"name 这个键直接说明了后面值的意义,不需要额外的数据字典或表结构来定义。因此,即使没有预先定义模式,接收方也能理解数据结构。


题目二:数据管理发展

题目:文件系统管理数据阶段相比人工管理阶段有哪些进步?又存在哪些主要缺陷?这些缺陷如何被数据库系统阶段解决?

考查知识点

  • 数据管理的三个阶段及其特点(第一期 §1.2)
  • 文件系统的优缺点
  • 数据库系统的改进

详细解答

进步(优点)

  • 数据可以长期保存在磁盘中
  • 文件格式多样化(文本、二进制等)
  • 由文件系统进行管理,具备一定独立性
  • 支持批处理和联机实时处理

缺陷

  • 应用程序对接不方便,没有统一接口
  • 不支持并发访问,无安全控制
  • 难以按用户视图表示数据
  • 数据间联系弱
  • 数据冗余不可避免

数据库系统如何解决

  • 提供统一的数据定义语言(DDL)和操作语言(DML),统一接口
  • 实现并发控制机制,保证多用户同时访问的正确性
  • 采用复杂的数据模型(如关系模型),清晰表达数据间联系
  • 通过规范化理论减少数据冗余
  • 提供安全性检查、完整性约束、事务管理等功能

题目三:关系型数据库核心术语

题目:解释主键、外键、复合键的作用。为什么主键通常使用自增整数类型?请给出一个必须使用复合键的实际场景。

考查知识点

  • RDBMS 核心术语(第一期 §1.4)
  • 主键、外键、复合键定义
  • 自增主键的工程理由

详细解答

术语 作用
主键 唯一标识表中的每一行,不允许为 NULL,一个表只能有一个主键
外键 关联两个表,引用另一张表的主键,保证参照完整性
复合键 由多个列组合而成的索引键,常用于表示多对多关系的中间表

为什么主键通常使用自增整数类型

  • 唯一性保证:自增机制天然生成唯一值,不会重复
  • 性能优势:整数比较比字符串快,且主键默认是聚簇索引,整型自增可以避免页分裂,提高插入效率
  • 存储空间:INT(4字节)或 BIGINT(8字节)占用空间小
  • 业务无关性:不依赖业务字段,避免业务变动影响主键

必须使用复合键的场景 :多对多关系的中间表。例如"学生选课"中间表,包含 (student_id, course_id) 作为复合主键,因为同一个学生可以选多门课,同一门课可以被多个学生选,只有联合才能唯一标识一条选课记录。


题目四:E-R 模型与联系类型

题目:设计一个"学生选课"系统的局部 E-R 图,至少包含学生、课程两个实体以及它们之间的联系。请分别说明实体、属性、联系在图中的表示符号,并判断联系类型属于哪种?

考查知识点

  • E-R 模型组成及符号(第一期 §1.4.1)
  • 联系类型判断(第一期 §1.4.2)

详细解答

E-R 图符号

  • 实体 → 矩形(如:学生、课程)
  • 属性 → 椭圆形(如:学号、姓名、课程号、课程名、学分)
  • 联系 → 菱形(如:选修)

联系类型 :学生与课程之间是 多对多(m:n) 关系。一个学生可选多门课程,一门课程可被多名学生选修。

E-R 图示(文字描述)

text

复制代码
   (学号)    (姓名)          (课程号)   (课程名)
     │        │                │         │
     ○        ○                ○         ○
      \      /                  \       /
       \    /                    \     /
        ╲  ╱                      ╲   ╱
        [学生]                    [课程]
          \                        /
           \                      /
            \                    /
             ╲                  ╱
              ╲                ╱
               ╲              ╱
                ◇ 选修 ◇
               /      \
              /        \
             /          \
         (成绩)        (选课时间)
           ○            ○

联系属性:在"选修"联系上可以附加属性,如"成绩"、"选课时间"等。

转关系模式:多对多联系需要转换为一个独立的中间表,包含两个外键(分别指向学生和课程)以及联系的属性。


题目五:数据库规范化(范式)

题目:某张表包含字段(订单ID,商品ID,商品名称,数量,单价,总价),其中主键为(订单ID,商品ID),"商品名称"只依赖于"商品ID","总价"可由"数量×单价"计算得出。请问该表违反了哪几个范式?应如何拆分?

考查知识点

  • 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)的定义与识别(第一期 §1.4.4)
  • 部分依赖与传递依赖

详细解答

分析

  1. 1NF 检查:所有字段都是原子值,满足 1NF。

  2. 2NF 检查 :主键为复合键 (订单ID, 商品ID)。非主键字段:

    • "数量"依赖于完整的 (订单ID, 商品ID) → 完全依赖,没问题。
    • "单价"依赖于 "商品ID" 吗?通常单价由商品决定 → 部分依赖(只依赖商品ID)。
    • "商品名称"依赖于 "商品ID" → 部分依赖。
    • "总价" = 数量 × 单价 → 属于派生属性,不独立依赖主键。

    结论:违反 2NF(存在部分依赖)。

  3. 3NF 检查:先要满足 2NF。即使拆到 2NF,还可能存在传递依赖。例如如果"商品ID"确定"供应商名称","供应商名称"再确定"供应商地址",则"供应商地址"传递依赖于"商品ID"。本题未给出,暂不涉及。

拆分方案(至少满足 3NF):

  • 订单明细表(订单ID,商品ID,数量)--- 主键 (订单ID, 商品ID)
  • 商品表(商品ID,商品名称,单价)--- 主键 商品ID
  • 订单表(订单ID,订单日期,客户ID...)--- 主键 订单ID
  • 总价 通常不做存储,查询时计算 数量 * 单价 即可,避免数据冗余和更新异常。

改进后:消除了部分依赖,且总价不再存储,符合设计原则。


题目六:SQL 语言分类

题目 :将以下操作归类为 DDL、DML、DQL、DCL 或 TCL:CREATE DATABASEINSERTSELECTGRANTALTER TABLEDELETECOMMITDROP USER

考查知识点

  • SQL 语句分类(第二期 §1.1)

详细解答

语句 分类 说明
CREATE DATABASE DDL 数据定义语言,定义数据库结构
INSERT DML 数据操纵语言,增加数据
SELECT DQL 数据查询语言(有时归为 DML 的子集,但单独列出)
GRANT DCL 数据控制语言,授权
ALTER TABLE DDL 修改表结构
DELETE DML 删除数据
COMMIT TCL 事务控制语言,提交事务
DROP USER DDL 删除用户(属于定义用户对象)

注意 :不同教材可能将 DQL 视为 DML 的一部分,但标准分类中通常单独列出。DROP USER 虽然没有直接操作表结构,但用户是数据库对象,属于 DDL。


题目七:MySQL 客户端使用

题目 :写出使用 mysql 命令行工具连接到远程主机 192.168.1.100 的 3307 端口,用户名为 reporter,密码为 123abc,并直接执行 SHOW DATABASES; 后退出的完整命令。同时说明如何用 mysqladmin 创建一个名为 testdb 的数据库。

考查知识点

  • mysql 客户端选项(第一期 §2.4.4.1)
  • mysqladmin 创建数据库(第一期 §2.4.4.3)

详细解答

mysql 连接并执行单条语句

bash

复制代码
mysql -h 192.168.1.100 -P 3307 -u reporter -p123abc -e "SHOW DATABASES;"

说明

  • -h 指定主机
  • -P 指定端口(大写)
  • -u 指定用户名
  • -p123abc 密码直接写在后面(生产环境不建议,会暴露在命令行历史中;可只写 -p 然后交互输入)
  • -e 后跟要执行的 SQL 语句,执行后自动退出。

mysqladmin 创建数据库

bash

复制代码
mysqladmin -h 192.168.1.100 -P 3307 -u reporter -p123abc create testdb

如果密码为空可省略 -p;否则建议只写 -p 回车后输入。


题目八:数据库与表的 DDL 操作

题目:请写出完整的 SQL 语句完成以下任务(顺序执行):

  • 创建数据库 company,默认字符集为 utf8mb4;
  • 在该库中创建表 employees,包含字段:emp_id(自增主键)、name(非空)、hire_date(日期类型)、salary(精确到两位小数,无符号);
  • employees 表添加一个 email 字段(变长字符串,最大100);
  • salary 字段的类型改为 DECIMAL(12,2)
  • 删除 hire_date 字段。

考查知识点

  • 创建数据库及指定字符集(第二期 §3.2)
  • 创建表(字段定义、主键、数据类型、约束)(第二期 §5.1)
  • ALTER TABLE 添加、修改、删除字段(第二期 §5.3)

详细解答

sql

复制代码
-- 1. 创建数据库 company,指定字符集
CREATE DATABASE company DEFAULT CHARACTER SET utf8mb4;

-- 2. 切换到该数据库
USE company;

-- 3. 创建 employees 表
CREATE TABLE employees (
    emp_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    hire_date DATE,
    salary DECIMAL(10,2) UNSIGNED
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. 添加 email 字段
ALTER TABLE employees ADD email VARCHAR(100);

-- 5. 修改 salary 字段类型为 DECIMAL(12,2)
ALTER TABLE employees MODIFY salary DECIMAL(12,2) UNSIGNED;

-- 6. 删除 hire_date 字段
ALTER TABLE employees DROP COLUMN hire_date;

注意DECIMAL(M,D) 中的 M 是总位数,D 是小数位数。最初设 DECIMAL(10,2) 可表示最大 99999999.99,足够一般工资。后改为 DECIMAL(12,2) 更宽松。删除字段操作不可逆,生产环境谨慎。


题目九:数据类型与选择原则

题目:为以下业务场景选择最合适的数据类型,并简要说明理由:

  • 用户年龄(0~150)
  • 商品价格(如 19.99 元)
  • 用户手机号(11位数字)
  • 文章正文(可能超过5000字)
  • 员工状态(在职/离职/休假,三选一)

考查知识点

  • 数据类型的选择原则(第二期 §4)
  • 各数据类型的适用场景

详细解答

业务场景 推荐类型 理由
用户年龄 TINYINT UNSIGNED 范围 0-255,足够存年龄(0~150),无符号更合适,占用仅1字节
商品价格 DECIMAL(10,2) 金额必须精确,不能使用浮点型(FLOAT/DOUBLE会丢失精度),DECIMAL 保证精确计算
用户手机号 CHAR(11)VARCHAR(11) 手机号是固定11位数字,但不建议存为整数 (可能丢失前导0,且无法做正则校验)。字符类型更合适,CHAR(11) 定长效率高
文章正文 TEXTLONGTEXT 超过5000字可能超过 VARCHAR(65535) 的行限制,TEXT 可存约64KB,足够普通文章;极长文章用 LONGTEXT
员工状态 ENUM('在职','离职','休假')TINYINT ENUM 语义清晰,限制只能选三个值;或用 TINYINT(1) 映射 0,1,2 占用空间更小

题目十:字符集与排序规则

题目 :MySQL 8.0 默认字符集是什么?utf8mb4 与旧版 utf8(即 utf8mb3)有何关键区别?排序规则 utf8mb4_0900_ai_ci 中的 aici 分别代表什么含义?什么情况下需要选择 utf8mb4_bin

考查知识点

  • MySQL 默认字符集演变(第二期 §2.1)
  • utf8 与 utf8mb4 的区别
  • 排序规则后缀含义
  • 区分大小写与二进制比较

详细解答

MySQL 8.0 默认字符集utf8mb4

utf8mb4utf8mb3 的区别

  • MySQL 中的 utf8 实际上是 utf8mb3,每个字符最多用 3 个字节存储,不支持辅助字符(如 emoji 表情、部分罕见汉字)
  • utf8mb4 是真正的 UTF-8 编码,每个字符最多用 4 个字节,完整支持 Unicode(含 emoji)
  • 建议始终使用 utf8mb4,避免存储特殊字符时出错。

排序规则 utf8mb4_0900_ai_ci 后缀含义

  • 0900:基于 Unicode 9.0.0 标准
  • aiAccent Insensitive (不区分重音),例如 ée 视为相同
  • ciCase Insensitive (不区分大小写),例如 Aa 视为相同

需要选择 utf8mb4_bin 的场景

  • 需要区分大小写和重音,进行二进制严格比较时
  • 用户名、密码校验(虽然密码通常存储哈希,但某些场景需要大小写敏感的唯一性)
  • 程序代码中需要精确匹配字符字节值的场景

示例SELECT 'A' = 'a' COLLATE utf8mb4_bin; 返回 0(不相等)。


附:知识点对应总表

题号 主要考查知识点(对应笔记章节)
1 第一期 §1.1 数据的分类
2 第一期 §1.2 数据管理发展历史
3 第一期 §1.4 关系型数据库理论(主键、外键、复合键)
4 第一期 §1.4.1 E-R 模型;§1.4.2 联系类型
5 第一期 §1.4.4 数据库规范化(1NF、2NF、3NF)
6 第二期 §1.1 SQL 分类
7 第一期 §2.4.4 MySQL 客户端使用;§2.4.4.3 mysqladmin
8 第二期 §3(数据库 DDL);§5(表 DDL)
9 第二期 §4 数据类型(选择原则)
10 第二期 §2 字符集与排序规则

学习建议:对于答错的题目,请回看对应章节,并动手在 MySQL 环境中执行相关代码。后续笔记将继续深入 SQL 查询与多表操作,建议扎实掌握当前基础知识。

相关推荐
我叫张小白。1 小时前
Redis BitMap实现用户签到功能
数据库·redis·缓存·fastapi
sxlishaobin1 小时前
阿里云邮件服务配置
阿里云·云计算
Kyrie_Li1 小时前
Kafka-基础知识总结
运维·分布式·kafka
OpsEye2 小时前
一次SSH暴力破解后的安全复盘
运维·服务器·ssh
大数据魔法师2 小时前
MongoDB(九) - MongoDB分片集安装与配置
数据库·mongodb
念何架构之路2 小时前
存储层技术MySQL
数据库·mysql
EntyIU2 小时前
DOCKER_CHEATSHEET
运维·docker·容器
xixingzhe22 小时前
SSH隧道连接服务器、数据库
运维·ssh
提伯斯6462 小时前
Jetson_Pixhawk局域网UDP连接QGC
linux·网络·嵌入式硬件·网络协议·udp·jetson