-1.在teaching数据库中,为SC表创建一个Insert触发器(SC_Insert),当SC表录入课程成绩时,如果成绩不低于60分, --则Student表中该学号的总学分SCredit字段值自动累加并更新。, --然后,将现有记录的SCredit字段值修改为0)
时间: 2024-02-15 19:01:29 浏览: 85
循环某数据库所有表,自动创建触发器
好的,针对你的问题,我给出以下的SQL语句,用于在teaching数据库中为SC表创建一个Insert触发器SC_Insert:
```
CREATE TRIGGER SC_Insert
AFTER INSERT ON SC
FOR EACH ROW
BEGIN
DECLARE sc_grade INT;
DECLARE s_credit INT;
-- 获取学生所得成绩
SELECT grade INTO sc_grade FROM SC WHERE sno = NEW.sno AND cno = NEW.cno;
-- 获取学生当前总学分
SELECT S.Credit INTO s_credit FROM Student S WHERE S.Sno = NEW.Sno;
-- 如果成绩不低于60分,则累加学分并更新Student表中的SCredit字段值
IF sc_grade >= 60 THEN
UPDATE Student SET Credit = Credit + NEW.Credit WHERE Sno = NEW.Sno;
UPDATE Student SET SCredit = SCredit + NEW.Credit WHERE Sno = NEW.Sno;
ELSE
UPDATE Student SET SCredit = SCredit WHERE Sno = NEW.Sno;
END IF;
-- 将SC表中现有记录的SCredit字段值修改为0
UPDATE SC SET SCredit = 0 WHERE Sno = NEW.Sno AND Cno = NEW.Cno;
END;
```
该触发器会在每次向SC表中插入新的记录时被触发,然后根据插入的成绩是否不低于60分进行操作:如果成绩不低于60分,则会自动累加该学生的总学分和已修学分;否则,只会更新已修学分,而总学分保持不变。最后,将SC表中现有记录的SCredit字段值修改为0,以确保该学生下一次的总学分计算不会包含该门课程的学分。
阅读全文