学生成绩管理数据库触发器实现

本文将介绍如何使用触发器来维护学生成绩管理数据库的三张表:

  1. 学生情况表 xsqk (xh 学号, xm 姓名, xb 性别, zy 专业, xib 系别, csrq 出生日期, zxf 总学分, bj 班级)
  2. 学生课程表 xskc (kch 课程号, kcm 课程名, kkxq 开课学期, xs 学时)
  3. 学生成绩表 xscj (xh 学号, kch 课程号, cj 成绩, xf 学分)

我们将实现以下功能:

(1)创建触发器 tri_ins_xscj,实现以下功能: 在 xscj 表中添加一条学生选课成绩信息后,自动更新该学生在学生情况 xsqk 表中总学分的信息。

触发器代码:

CREATE TRIGGER tri_ins_xscj
AFTER INSERT ON xscj
FOR EACH ROW
UPDATE xsqk SET zxf = zxf + NEW.xf WHERE xh = NEW.xh;

说明:

  • AFTER INSERT ON xscj: 表示在 xscj 表中插入一条记录后触发该触发器;
  • FOR EACH ROW: 表示对每一行插入的记录都触发该触发器;
  • UPDATE xsqk SET zxf = zxf + NEW.xf WHERE xh = NEW.xh: 表示更新 xsqk 表中该学生的总学分信息,其中 NEW.xf 表示插入记录中的学分信息,NEW.xh 表示插入记录中的学号信息。

(2)创建触发器 tri_delete_xskc,实现以下功能: 在 xskc 表中删除某门课的记录后,对应 xscj 表中所有的选课记录都会删除。

触发器代码:

CREATE TRIGGER tri_delete_xskc
AFTER DELETE ON xskc
FOR EACH ROW
DELETE FROM xscj WHERE kch = OLD.kch;

说明:

  • AFTER DELETE ON xskc: 表示在 xskc 表中删除一条记录后触发该触发器;
  • FOR EACH ROW: 表示对每一行删除的记录都触发该触发器;
  • DELETE FROM xscj WHERE kch = OLD.kch: 表示删除 xscj 表中所有该课程号的选课记录,其中 OLD.kch 表示删除记录中的课程号信息。

(3)创建触发器 tri_update_xskc,实现以下功能: 在 xskc 表中更新某门课的课程号之后,对应 xscj 表中所有的课程号都会更新。

触发器代码:

CREATE TRIGGER tri_update_xskc
AFTER UPDATE ON xskc
FOR EACH ROW
UPDATE xscj SET kch = NEW.kch WHERE kch = OLD.kch;

说明:

  • AFTER UPDATE ON xskc: 表示在 xskc 表中更新一条记录后触发该触发器;
  • FOR EACH ROW: 表示对每一行更新的记录都触发该触发器;
  • UPDATE xscj SET kch = NEW.kch WHERE kch = OLD.kch: 表示更新 xscj 表中所有该课程号的记录的课程号为新的课程号,其中 NEW.kch 表示更新记录中的课程号信息,OLD.kch 表示更新前的课程号信息。

注意:

  • xh (学号) 类型为 char(10)
  • xf (学分) 类型为 smallint
  • kch (课程号) 类型为 char(5)

通过以上触发器,我们可以确保学生成绩管理数据库的数据一致性和完整性,并简化数据库维护操作。

学生成绩管理数据库触发器实现

原文地址: https://www.cveoy.top/t/topic/nSI7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录