学生-课程模式 S-T : 学生表: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-09 11:11:19 浏览: 31
(1) 触发器SC_trig的SQL语句如下:
```
CREATE TRIGGER SC_trig BEFORE INSERT ON SC
FOR EACH ROW
BEGIN
DECLARE s_no CHAR(9);
SELECT Sno INTO s_no FROM Student WHERE Sno = NEW.Sno;
IF s_no IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该学生不存在,无法插入选课记录!';
END IF;
END;
```
(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;
```
这两个触发器分别实现了题目中的两个要求。触发器SC_trig通过查询Student表判断插入的学生是否存在,若不存在则取消插入操作,并抛出错误信息。触发器C_trig则通过判断插入的学分是否大于5,若大于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 = '生物信息学'
)
```