✏️ 课堂习题
第 3 章 · 数据库和表的基本操作 · 共 8 题 · 由易到难
1
创建数据库的完整语句中,DEFAULT CHARSET 一般推荐设成什么?为什么?
▼
参考答案
推荐 utf8mb4。它能完整支持中文及 emoji 等四字节字符,避免中文乱码;旧版常用的 utf8 实际只支持三字节,个别生僻字会出错。
2
判断:DROP DATABASE 删除库后,里面的表还在,只是库没了。(对 / 错)
▼
参考答案
❌ 错。DROP DATABASE 会连同库内所有表和数据一起删除,且不可恢复,执行前务必确认。
3
存储年龄(0~120)、工资(带两位小数)、身份证号、出生日期,分别该用什么类型?
▼
参考答案
年龄:TINYINT UNSIGNED(无符号 0~255 足够);工资:DECIMAL(10,2)(避免浮点误差);身份证:CHAR(18)(定长含 X);出生日期:DATE。
4
主键(PRIMARY KEY)有什么作用?能否为 NULL?能否重复?
▼
参考答案
主键唯一标识一行记录;不能为 NULL,也不能重复。例如 student 表的 Sno 作主键,保证每个学生只有一条、且学号不为空。
5
选课表 sc 为什么用 (Sno, Cno) 两个字段做复合主键?
▼
参考答案
因为一个学生可以选多门课,一门课也有多个学生选。单独用 Sno 或 Cno 都会重复,但"学号+课程号"组合能唯一确定"某学生某门课的那一条成绩",所以用复合主键。
6
外键(FOREIGN KEY)解决了什么问题?
▼
参考答案
外键保证本表字段的值必须在另一张表的主键中存在,防止出现"引用了不存在的数据"的脏数据。例如 sc.Sno 必须存在于 student 表,否则插入成绩会报错。
7
AUTO_INCREMENT 有哪些使用限制?
▼
参考答案
① 必须是整数类型;② 必须建立主键或唯一索引;③ 一个表通常只有一个自增列;④ 插入时写 NULL 或不写该字段,MySQL 自动赋值。
8
查看 student 表结构的两条命令是什么?它们输出有何不同?
▼
参考答案
DESC student; 以表格显示字段名、类型、是否允许 NULL、是否主键、默认值等;SHOW CREATE TABLE student; 显示完整的建表 SQL 语句,适合复制复用。
🖥️ 上机练习
第 3 章 · 数据库和表的基本操作 · 共 5 个实训任务 · 建表实战 · 独立完成
🎯 本次上机目标:在 MySQL 中从零建出"教学实例"库的 student、course 两张表,并能查看、修改表结构。所有 SQL 写入练习本,下课提交。
任务 1
建库并切换
创建 教学实例 库(utf8mb4),并用 USE 切换进去。
任务 2
建 student 表
按讲义第7节字段(Sno 主键、Sname 非空、class 默认01 等)建 student 表,并执行 DESC 查看结构。
任务 3
建 course 表
建课程表 course(Cno 主键、Cname、Tno 可空),体会与 student 表不同的字段设计。
任务 4
改表练习
给 student 表增加一个 email 字段;再把 sage 的类型改为 SMALLINT,观察 DESC 变化。
任务 5
自增体验
另建一张测试表 test_id(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10)),插入两条只写 name 的记录,验证 id 自动生成。