创建触发器,作用是:当在学生表S中删除某一个学生时,在学生选课表SC中的选课记录也全部被删除。 创建触发器,该触发器能够保证在学生选课表SC表中添加新的记录时,新学生的学号SNO必须已经存在于学生基本信息表S中。
时间: 2024-05-06 20:18:58 浏览: 24
第一个触发器的SQL语句如下:
```sql
CREATE TRIGGER `delete_student`
AFTER DELETE ON `S`
FOR EACH ROW
BEGIN
DELETE FROM `SC` WHERE `SNO` = OLD.`SNO`;
END;
```
第二个触发器的SQL语句如下:
```sql
CREATE TRIGGER `add_sc_record`
BEFORE INSERT ON `SC`
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT 1 FROM `S` WHERE `SNO`=NEW.`SNO`) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '该学生不存在';
END IF;
END;
```
第一个触发器在S表中删除记录时会自动删除SC表中相应的记录,第二个触发器在插入SC表记录之前会检查该学生是否存在于S表中,如果不存在则会抛出异常。
相关问题
创建一个级联修改触发器trigger_1,即当修改学生课程表Course中的某门课的课程号时,对应学生的选课表SC中的课程号也作修改
你的问题是关于数据库的触发器(trigger)的。下面是一个级联修改触发器的示例代码,可以满足你的需求:
```
CREATE TRIGGER trigger_1
AFTER UPDATE ON Course
FOR EACH ROW
BEGIN
UPDATE SC SET CourseNo = NEW.CourseNo WHERE StudentID = NEW.StudentID AND CourseNo = OLD.CourseNo;
END;
```
当Course表中某一行的课程号被修改时,触发器会将对应学生的选课表SC中的课程号也作出相应修改。这个触发器是一个AFTER UPDATE触发器,意味着它会在Course表中的修改操作完成之后执行。每次更新Course表中的一行时,触发器会检查是否有学生已经选过该门课程,如果有,就将学生选课表中的该门课程的课程号更新为新的课程号。
为C表创建一个触发器Course_del,当删除了C表中的一条课程信息时,同时将表SC表中相应的学生选课记录删除掉。
可以使用如下的SQL语句创建一个触发器:
```
CREATE TRIGGER Course_del
AFTER DELETE ON C
FOR EACH ROW
BEGIN
DELETE FROM SC WHERE SC.Cno = OLD.Cno;
END;
```
其中,`AFTER DELETE ON C` 表示在C表上执行删除操作后触发该触发器;`FOR EACH ROW` 表示对于每一行删除操作都会执行触发器中的代码;`OLD.Cno` 表示被删除的行中的Cno列的值,即要删除的课程的编号;`DELETE FROM SC WHERE SC.Cno = OLD.Cno` 表示删除SC表中Cno列值为被删除的课程编号的所有行。
这样,当删除C表中的一条课程信息时,触发器会自动将SC表中相应的学生选课记录删除掉。