中国大学MOOC数据库系统概论中国人民大学实验三 触发器

实验题基于学生选课数据库,其包含三个关系模式:
(1)学生关系模式Student(Sno, Sname, Ssex, Sage,Sdept)
(2)课程关系模式Course(Cno, Cname, Cpno, Ccredit)
(3)选课关系模式SC(Sno, Cno, Grade)其中,
学生关系模式各字段的含义为Sno:学号,Sname:姓名,Ssex:性别,Sage:年龄,Sdept:所在系。
课程关系模式各字段的定义为Cno:课程号,Cname:课程名,Cpno:先行课,Ccredit:学分。
选课关系模式各字段的定义为Sno:学号,Cno:课程号,Grade:成绩。
其中,SC表中学号Sno和课程号Cno分别对应于Student表的主码和Course表的主码,即学号Sno和课程号Cno是SC表的外码。

  1. 对于学生表:STU(SNO CHAR(10),SNAME CHAR(10),SAGE INT) 和日志表LOGS(TIME DATETIME,SNO CHAR(10))设置一个触发器,使得在STU表中插入信息时,日志表LOGS中插入当前时间与学生学号(SNO);
CREATE TRIGGER INSTU

AFTER INSERT ON STU

FOR EACH ROW AS

BEGIN

     INSERT INTO LOGS

     VALUES(CURRENT_DATE,new.SNO);

END;
  1. 对学生表STU(SNO,SNAME,SSEX,SAGE),设置一个触发器,使得当插入新信息时,如果性别SSEX不是’FEMALE’或’MALE’,则将性别置为空;
CREATETRIGGER INSTU

AFTERINSERT ON STU

FOR EACHROW AS

BEGIN

     IF(new.SSEX<>'FEMALE') AND (new.SSEX<>'MALE')

         THEN UPDATE STU

                  SET SSEX=NULL

                  WHERE SNO=new.SNO;

     END IF;

END;
  1. 对于学生表:STU(SNO,SNAME,SSEX,SAGE,SDEPT)
    设置一个触发器,使得在对STU表进行SAGE更新的时候,只能升不能降,如果SAGE比原来低则SAGE保持不变;
CREATE TRIGGER UPSTU

AFTER UPDATE OF SAGE ON STU

FOR EACH ROW AS

BEGIN

      IF(new.SAGE<old.SAGE)

          THEN UPDATE STU 

                   SET SAGE=old.SAGE

                   WHERE SNO=new.SNO;

      END IF;

END;
  1. 对于学生表:STU(SNO,SNAME,SGRADE)
    ,设置一个触发器,使得每次在学生表STU中插入信息时,年级SGRADE均为2018;
CREATE TRIGGER INSTU

AFTER INSERT ON STU

FOR EACH ROW AS

BEGIN

      UPDATE STU

      SET SGRADE=2018

      WHERE SNO=new.SNO;

END;
  1. 对于课程表COU(CNO,CNAME,CPNO,CCREDIT)与日志表LOGS(TIME DATETIME,CNO CHAR(10)),设置一个触发器,使得当COU表插入信息时,日志表LOGS中插入当前时间与课程号(CNO);
CREATE TRIGGER INCOU

AFTER INSERT ON COU

FOR EACH ROW AS

BEGIN

     INSERT INTO LOGS

     VALUES(CURRENT_DATE,new.CNO);

END;
  1. 对于学生表STU(SNO,SNAME,SSEX,SAGE),设置一个触发器,使得当插入新信息时,如果年龄SAGE大于22,则将年龄设为22;
CREATE TRIGGER INSTU

AFTER INSERT ON STU

FOR EACH ROW AS

BEGIN

       IF(new.SAGE>22)

           THE UPDATE STU

                    SET SAGE=22

                    WHERE SNO=new.SNO;

       END IF;

END;
  1. 对于学生选课表COU(SNO,CNO,GRADE)与日志表LOGS(TIME DATETIME,SNO CHAR(10),CNO CHAR(10),OLDGRADE INT),设置一个触发器,使得当成绩信息GRADE改变时,在日志表LOGS中记录以前的成绩;
CREATE TRIGGER UPCOU

AFTER UPDATE ON COU

FOR EACH ROW AS

BEGIN

       IF(new.GRADE<>old.GRADE)

           THEN INSERT INTO LOGS

                     VALUES(CURRENT_DATE,new.SNO,new.CNO,old.GRADE);

       END IF;

END;
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值