基于school数据库中的student, course, sc表,在SQL数据库中创建满足下述要求的触发器:对STUDENT表进行插入时,如果年龄为空,则将该生年龄设置为所有学生年龄的平均值。
时间: 2024-02-06 15:13:06 浏览: 84
好的,以下是可以实现该要求的触发器代码:
```
CREATE TRIGGER trg_student_insert
AFTER INSERT ON STUDENT
FOR EACH ROW
BEGIN
IF NEW.AGE IS NULL THEN
DECLARE avg_age FLOAT;
SELECT AVG(AGE) INTO avg_age FROM STUDENT;
UPDATE STUDENT SET AGE = avg_age WHERE ID = NEW.ID;
END IF;
END;
```
该触发器将在每次对STUDENT表进行插入操作时触发。如果插入的新记录中年龄字段为空,则触发器将计算出所有学生年龄的平均值,并将该值赋给新记录的年龄字段。需要注意的是,该触发器是针对每一行进行的,因此对于批量插入操作,需要逐行触发该触发器。
相关问题
基于school数据库中的student, course, sc表,在SQL数据库中创建满足下述要求的触发器:对SC表进行插入时,如果学生的选课总学分超过30,则报错并撤销插入。
好的,这是一个有趣的问题。以下是可以在MySQL数据库中创建的触发器代码:
```
CREATE TRIGGER check_sc BEFORE INSERT ON sc
FOR EACH ROW
BEGIN
DECLARE total_credits INT;
SELECT SUM(credit) INTO total_credits FROM course WHERE cno = NEW.cno;
SELECT SUM(credit) INTO total_credits FROM sc WHERE sno = NEW.sno;
IF (total_credits > 30) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '选课总学分超过30';
END IF;
END;
```
该触发器会在每次向SC表中插入新记录之前被触发。它会计算该学生所选课程的总学分,并检查该总学分是否超过了30。如果超过了30,则会报错并撤销插入。这可以通过使用SIGNAL语句来实现,该语句会抛出一个异常,并显示指定的错误消息。
基于school数据库中的student, course, sc表,在SQL数据库中创建满足下述要求的触发器:对SC表进行插入或修改时,如果考试成绩不在0-100范围内时,则撤销插入或修改操作。
可以使用下面的SQL语句创建触发器:
```
CREATE TRIGGER check_score
BEFORE INSERT OR UPDATE ON sc
FOR EACH ROW
BEGIN
IF NEW.score < 0 OR NEW.score > 100 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Score must be between 0 and 100';
END IF;
END;
```
这个触发器会在每次插入或更新SC表中的记录时执行。如果插入或更新的记录的score值不在0-100范围内,则会触发一个SQLSTATE错误,并撤销操作。
阅读全文