学生表:Student(Sno,Sname,Ssex,Sage,Sdept),各属性分别表示学号(char(9)),学生姓名(char(20)),性别(char(2)),年龄(smallint),系别(char(20)) 课程表:Course(Cno,Cname,Cpno,Ccredit),各属性分别表示课程号(char(4)),课程名(char(40)),先修课程号(char(4)),学分(smallint) 学生选课表:SC(Sno,Cno,Grade),各属性分别表示学号(char(9)),课程号(char(4)),成绩(smallint) (1)定义触发器SC_trig,在向Sc表中插入一条记录时,通过触发器检查记录的学号值在student表中是否存在,若不存在,则取消插入或操作。 (2)定义触发器C_trig,实现约束,输入或更新课程的学分不能大于5,如果大于5,则自动改为5。
时间: 2024-02-12 18:02:32 浏览: 113
(1) 触发器SC_trig的SQL语句如下:
```
CREATE TRIGGER SC_trig
BEFORE INSERT ON SC
FOR EACH ROW
BEGIN
DECLARE sno_count INT;
SELECT COUNT(*) INTO sno_count FROM Student WHERE Sno = NEW.Sno;
IF sno_count = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Inserted student does not exist!';
END IF;
END;
```
该触发器在每次向SC表中插入一条记录之前,会先查询Student表中是否存在该记录对应的学号,如果不存在,则会抛出一个SQL异常,从而取消插入或操作。
(2) 触发器C_trig的SQL语句如下:
```
CREATE TRIGGER C_trig
BEFORE INSERT ON Course
FOR EACH ROW
BEGIN
IF NEW.Ccredit > 5 THEN
SET NEW.Ccredit = 5;
END IF;
END;
```
该触发器在每次向Course表中插入一条记录之前,会先判断该记录的学分是否超过了5分,如果超过了,则会自动将其修改为5分。
相关问题
2 实体完整性验证 (1)Student1 表数据输入 Sno Sname Ssex Sage Sdept 3001 赵达 男 20 SX 3002 杨丽 女 21 JSJ 3003 李寅 女 21 SX 3004 周强 女 21 SX 3001 刘美 女 19 SX
在这个学生表中,我们可以看到每个学生都有一个唯一的学号(Sno),所以我们可以在输入数据之前先验证一下Sno是否重复。如果有重复的Sno,将会导致数据异常或错误。
除此之外,还需要验证每个学生的年龄(Sage)是否合理,比如说是否小于18岁或者大于40岁等等。如果年龄不合理,也需要提示用户进行修改或者进行其他操作。
最后,还需要验证每个学生所属的学院(Sdept)是否在系统中存在,如果不存在需要提示用户进行修改或者添加该学院的信息。
STUDENT表有 sno sname ssex sage sdept,couse 有cno cname credit semester,sc有sno cno gradr,请使用SQL语句完成查询选修了生物信息学课程且成绩高于该门课程平均分数的学生的姓名。
SELECT s.sname
FROM student s, sc, couse c
WHERE s.sno = sc.sno
AND sc.cno = c.cno
AND c.cname = '生物信息学'
AND sc.grade > (
SELECT AVG(sc.grade)
FROM sc, couse
WHERE sc.cno = couse.cno
AND couse.cname = '生物信息学'
)
```
阅读全文