编写一个触发器 tr_del:当从 teacher 表中删除一个教师时,在teaching表内,该教师的上课 记录也自动删除;
时间: 2023-07-15 09:12:18 浏览: 188
可以使用 MySQL 中的触发器来实现该功能。下面是一个示例的 SQL 代码:
```
CREATE TRIGGER tr_del
AFTER DELETE ON teacher
FOR EACH ROW
BEGIN
DELETE FROM teaching WHERE teacher_id = OLD.teacher_id;
END;
```
解释一下上面的代码:
- `CREATE TRIGGER` 是创建触发器的关键字;
- `tr_del` 是触发器的名称,可以自己取一个有意义的名称;
- `AFTER DELETE ON teacher` 表示在执行 teacher 表的 DELETE 操作之后触发该触发器;
- `FOR EACH ROW` 表示对于每一行数据都执行触发器代码;
- `BEGIN` 和 `END` 之间是触发器需要执行的代码块;
- `DELETE FROM teaching WHERE teacher_id = OLD.teacher_id` 表示从 teaching 表中删除 teacher_id 等于被删除教师的 ID 的所有记录。其中的 `OLD.teacher_id` 表示被删除的教师的 ID。
这样,当从 teacher 表中删除一个教师时,触发器会自动删除 teaching 表中与该教师相关的记录。
相关问题
编写一个触发器trig_del_score,当删除一个成绩,将删除的成绩添加到T_delScore中进行备份保存。
以下是MySQL数据库中创建一个名为trig_del_score的触发器,实现在删除成绩时将删除的成绩添加到T_delScore中进行备份保存。
```sql
CREATE TRIGGER trig_del_score
AFTER DELETE ON score
FOR EACH ROW
BEGIN
INSERT INTO T_delScore (student_id, course_id, score)
VALUES (OLD.student_id, OLD.course_id, OLD.score);
END;
```
解释:
- CREATE TRIGGER:创建一个触发器。
- trig_del_score:触发器的名称。
- AFTER DELETE ON score:当成绩表中删除一条记录时触发。
- FOR EACH ROW:对于每一行删除。
- BEGIN...END:触发器的执行部分。
- INSERT INTO T_delScore:将删除的成绩插入到T_delScore表中。
- (student_id, course_id, score):T_delScore表中的列名。
- VALUES (OLD.student_id, OLD.course_id, OLD.score):插入的值,由被删除的记录的旧值组成。
注意:
- 在创建触发器时,需要确保MySQL用户具有足够的权限来创建触发器。
- T_delScore表需要事先创建好,包含与score表相同的列名和数据类型。
- 在删除成绩记录时,将会将删除的成绩备份到T_delScore表中,请谨慎操作。
在student表中创建一个删除记录的触发器ctr_del,当删除student表中的记录时,如果该记录有选修课程,触发器将删除sc中相应的记录。并删除一个记录检验之。
好的,我明白了你的问题。以下是创建该触发器的SQL语句:
```
CREATE TRIGGER ctr_del
AFTER DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM sc WHERE sc.s_id = OLD.s_id;
DELETE FROM record_check WHERE s_id = OLD.s_id;
END;
```
说明:
- `AFTER DELETE ON student` 表示在删除 `student` 表中的记录之后触发该触发器。
- `FOR EACH ROW` 表示对于每一行记录都执行该触发器。
- `OLD` 表示被删除的行,`OLD.s_id` 表示被删除行的 `s_id` 字段的值。
- `DELETE FROM sc WHERE sc.s_id = OLD.s_id;` 表示删除 `sc` 表中 `s_id` 等于被删除行的 `s_id` 字段值的记录。
- `DELETE FROM record_check WHERE s_id = OLD.s_id;` 表示删除 `record_check` 表中 `s_id` 等于被删除行的 `s_id` 字段值的记录。
这样,在删除 `student` 表中的记录时,该触发器将自动删除相关的 `sc` 表中的记录,并删除一个 `record_check` 表中的记录检验之。
阅读全文