创建一删除前触发器trigger_student_sc_delete,实现在删除一名学生时,级联删除sc中的相关记录。
时间: 2024-02-21 09:57:26 浏览: 22
好的,这是一个关于 MySQL 数据库的问题。我提供一个参考的 SQL 代码如下:
```
CREATE TRIGGER trigger_student_sc_delete
BEFORE DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM sc WHERE sc.sid = OLD.sid;
END;
```
其中,`student` 表是学生表,`sc` 表是学生选课表,`sid` 是学生表中的学生编号,`OLD.sid` 表示当前要删除的学生的学生编号。这个触发器的作用是,当 `student` 表中删除一名学生时,会自动将 `sc` 表中该学生的所有选课记录一并删除。
相关问题
创建一个触发器ScDel_Cascade,当删除Student中的数据时,数据表SC中有关刚刚删除学生的修课成绩信息也能被级联删除掉。
你可以使用以下语法来创建一个名为 `ScDel_Cascade` 的触发器,以在删除 `Student` 表中的数据时同时删除与之相关的 `SC` 表中的数据:
```
CREATE TRIGGER ScDel_Cascade
BEFORE DELETE ON Student
FOR EACH ROW
BEGIN
DELETE FROM SC WHERE Sno = OLD.Sno;
END;
```
在 `BEGIN` 和 `END` 之间编写的代码将在删除操作执行前执行。`OLD` 是一个关键字,用于引用旧的行数据。`Sno` 是 `SC` 表中与 `Student` 表关联的外键列名。这个触发器会在删除 `Student` 表中的行时,删除 `SC` 表中所有与该行相关的数据。
创建与 grade 表相同的表 sc;在 course 表上创建触发器 del_trig,当 course 表上 删除一门课程时,级联删除 sc 表该课程的记录
创建 sc 表的 SQL 语句:
```sql
CREATE TABLE sc (
sno CHAR(10),
cno CHAR(4),
grade INT,
PRIMARY KEY(sno, cno),
FOREIGN KEY(sno) REFERENCES student(sno),
FOREIGN KEY(cno) REFERENCES course(cno)
);
```
创建触发器 del_trig 的 SQL 语句:
```sql
CREATE TRIGGER del_trig
AFTER DELETE ON course
FOR EACH ROW
BEGIN
DELETE FROM sc WHERE cno = OLD.cno;
END;
```
以上 SQL 语句的含义为:
- 创建名为 sc 的表,包含学号、课程号和成绩字段,其中学号和课程号组合为主键,同时分别与 student 表和 course 表的主键相连。
- 创建名为 del_trig 的触发器,它在 course 表上进行 DELETE 操作时触发。对于每一条被删除的记录,触发器会在 sc 表中删除与该课程号相同的记录。其中 `OLD.cno` 代表被删除的记录中的课程号字段。