实战练习 1.创建一个不及格学生表bjg_sc1,包括学号,课程号,成绩字段,数据类型参照sc1表,利用触发器实现:如果向sc1表插入学生的成绩信息如果是不及格,自动将该学生的信息插入到bjg_sc1表中。 2.利用触发器实现:更新sc1表中某个学生的成绩数据,如果bjg_sc1中有该学生,并且该学生的成绩更新之后还没有及格,则自动更新bjg_sc1表中该学生的数据,如果更新以后该学生及格了,则在bjg_sc1表中删除学生。始终保持sc1表中不及格的数据与bjg_sc1表中的数据一致。
时间: 2024-01-01 21:06:32 浏览: 86
好的,我会根据您的要求回答问题。
针对您的第一个问题,以下是实现该需求的触发器代码:
```sql
CREATE TRIGGER trig_insert_bjg_sc1
AFTER INSERT ON sc1
FOR EACH ROW
BEGIN
IF NEW.grade < 60 THEN
INSERT INTO bjg_sc1 VALUES (NEW.sid, NEW.cid, NEW.grade);
END IF;
END;
```
该触发器在每次向sc1表插入数据时触发,判断插入的数据是否不及格,如果不及格则将该学生的信息插入到bjg_sc1表中。
针对您的第二个问题,以下是实现该需求的触发器代码:
```sql
CREATE TRIGGER trig_update_sc1
AFTER UPDATE ON sc1
FOR EACH ROW
BEGIN
DECLARE cnt INT;
SELECT COUNT(*) INTO cnt FROM bjg_sc1 WHERE sid = NEW.sid;
IF cnt > 0 AND NEW.grade < 60 THEN
UPDATE bjg_sc1 SET grade = NEW.grade WHERE sid = NEW.sid;
ELSEIF cnt > 0 AND NEW.grade >= 60 THEN
DELETE FROM bjg_sc1 WHERE sid = NEW.sid;
ELSEIF cnt = 0 AND NEW.grade < 60 THEN
INSERT INTO bjg_sc1 VALUES (NEW.sid, NEW.cid, NEW.grade);
END IF;
END;
```
该触发器在每次更新sc1表中的数据时触发,首先判断该学生是否已经在bjg_sc1表中,如果是,则更新该学生的成绩;如果更新后该学生及格了,则删除该学生在bjg_sc1表中的记录;如果该学生原本不及格,但是更新后及格了,则将该学生的信息插入到bjg_sc1表中。通过该触发器,可以保证sc1表和bjg_sc1表中的不及格学生信息始终保持一致。
阅读全文