6. 综合实战:维护教学实例库

把三类操作串起来,做一次完整的"上新—改价—下架"演练:

sql
-- 1) 上新:给 01班 插入两名新生
INSERT INTO student (Sno, Sname, Ssex, class)
VALUES ('031', '新同学甲', '男', '01'),
       ('032', '新同学乙', '女', '01');

-- 2) 改:把 031 的班级改为 02
UPDATE student SET class = '02' WHERE Sno = '031';

-- 3) 上新成绩:给新生插入选课记录
INSERT INTO sc (Sno, Cno, score)
VALUES ('031', '01', 88.0), ('032', '01', 75.0);

-- 4) 下架:删除没有成绩的 032 同学
DELETE FROM student WHERE Sno = '032';
⚠️ 第4步若直接删 032 但 sc 里已有它的成绩,会因为外键约束失败。正确顺序是先删 sc 中的成绩,再删 student——这就是"外键保引用"在实战中的体现。

📝 本节例题

以下例题均基于 教学实例 库(student / course / sc / teacher / grades / dept / emp),开始前先执行 USE 教学实例;。建议先自己写一遍,再展开答案对照。

例 1
新增 021 号学生(李明,男,16 岁,01 班),并给他插入 01 号课程 88 分。
查看参考答案(可复制)
sql
INSERT INTO student(Sno, Sname, Ssex, sage, class) VALUES('021', '李明', '男', 16, '01');
INSERT INTO sc VALUES('021', '01', 88.0);
💡 两张表的插入有先后:先建学生(父表),再录成绩(子表)。
例 2
把所有不及格的成绩统一改为 60 分(补考及格线)。
查看参考答案(可复制)
sql
UPDATE sc SET score = 60 WHERE score < 60;
💡 改完用 SELECT * FROM sc WHERE score < 60 复查应为 0 行。
例 3
用事务把 003 号学生从 03 班转到 01 班,并把他的数学成绩加 5 分:确认无误后 COMMIT,发现问题则 ROLLBACK。
查看参考答案(可复制)
sql
START TRANSACTION;

UPDATE student SET class = '01' WHERE Sno = '003';
UPDATE sc SET score = score + 5 WHERE Sno = '003' AND Cno = '02';

SELECT * FROM student WHERE Sno = '003';
SELECT * FROM sc WHERE Sno = '003';

COMMIT;      -- 确认无误后提交;有问题就改成 ROLLBACK;
💡 事务保证两步操作要么都成功要么都撤销,避免出现'班级改了成绩没改'。