学生表: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 11:02:32 浏览: 119
(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分。
相关问题
在学生表student(sno,sname,sage,ssex,sdept)中插入新元组, 学号:200110101 姓名:Mary 年龄:33
好的,我可以回答这个问题。您可以执行以下 SQL 查询语句来插入新元组:
```
INSERT INTO student (sno, sname, sage, ssex, sdept)
VALUES ('200110101', 'Mary', 33, 'female', 'unknown');
```
请注意,这个查询语句假设 `sno` 是主键,因此必须保证新的学号不重复。同时,我还假设您的年龄是整数类型,性别是字符串类型,系别是字符串类型,并且您想将新学生的系别设为 "unknown"。如果这些假设不成立,请根据您的实际情况作出相应调整。
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 = '生物信息学'
)
```
阅读全文