编写一个触发器trig_stu_score_delete,在学生表删除一条记录时则同时删除成绩表中相应的信息。
时间: 2024-02-13 09:04:50 浏览: 94
您好,以下是MySQL数据库中创建一个名为trig_stu_score_delete的触发器,实现在学生表删除一条记录时同时删除成绩表中相应的信息。
```sql
CREATE TRIGGER trig_stu_score_delete
AFTER DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM score WHERE student_id = OLD.student_id;
END;
```
解释:
- CREATE TRIGGER:创建一个触发器。
- trig_stu_score_delete:触发器的名称。
- AFTER DELETE ON student:当学生表中删除一条记录时触发。
- FOR EACH ROW:对于每一行删除。
- BEGIN...END:触发器的执行部分。
- DELETE FROM score:从成绩表中删除数据。
- WHERE student_id = OLD.student_id:删除与被删除学生ID相同的成绩记录。
注意:
- 在创建触发器时,需要确保MySQL用户具有足够的权限来创建触发器。
- 在删除学生记录时,将会连带删除与该学生相关的成绩记录,请谨慎操作。
相关问题
编写一个触发器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表中,请谨慎操作。
创建一个after触发器trig_foreign,当向score表中插入一条新记录时,如果插入的数据与student表中数据不匹配,即没有对应的学号存在,则提示“该学生信息不存在,不允许插入选课信息”,并将此记录删除。
可以使用如下的 SQL 语句创建一个名为 `trig_foreign` 的触发器,实现向 score 表中插入新记录时自动检查该记录对应的学生是否存在,如果不存在则提示错误并删除该记录:
```
CREATE TRIGGER trig_foreign
AFTER INSERT ON score
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM student WHERE student_id = NEW.student_id) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该学生信息不存在,不允许插入选课信息';
DELETE FROM score WHERE score_id = NEW.score_id;
END IF;
END;
```
这里使用了 `AFTER INSERT` 指示器,表示在插入操作执行后触发该触发器。`FOR EACH ROW` 表示在每一行插入操作完成后都会执行触发器中的代码。`NEW.student_id` 表示新插入的记录中的学号,这个学号将被用来检查该记录对应的学生是否存在。具体来说,`IF NOT EXISTS (SELECT * FROM student WHERE student_id = NEW.student_id)` 表示如果找不到学号为 `NEW.student_id` 的学生记录,则执行下面的代码。`SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该学生信息不存在,不允许插入选课信息'` 表示输出错误信息。`DELETE FROM score WHERE score_id = NEW.score_id` 表示删除刚刚插入的记录,即该记录对应的选课信息。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)