创建一个触发器delete_s_trigger,当删除s表中某个人记录时,同时删除sc表中相应的所有课程的成绩。
时间: 2024-10-22 09:27:02 浏览: 174
创建一个触发器`delete_s_trigger`可以利用数据库系统的特性,在删除`s`表(人员表)中特定记录的同时,自动删除关联的`sc`表(成绩表)中的相关数据。这是一个常见的级联删除机制。以下是这个操作在SQL中的一般步骤:
```sql
CREATE TRIGGER delete_s_trigger
AFTER DELETE ON s
FOR EACH ROW
BEGIN
DELETE FROM sc
WHERE sc.person_id = OLD.id; -- 旧记录的id可能会有所不同,这里假设person_id是关联字段
END;
```
在这个例子中:
- `CREATE TRIGGER`声明了触发器。
- `delete_s_trigger`是触发器的名称。
- `AFTER DELETE ON s`指明当`s`表有行被删除后,触发器会被激活。
- `FOR EACH ROW`表示对于删除的每一行都会执行一次触发器内的SQL。
- `DELETE FROM sc WHERE sc.person_id = OLD.id`是关键部分,它会查找`sc`表中`person_id`等于刚被删除的`s`表中对应记录的`id`的所有行,并进行删除。
相关问题
创建一个delete_s_trigger触发器,当删除s表中某学生记录时,同时删除sc表中相应的所有选修课程记录: 然后删除0529赵欣同学时,观察sc表中的结果
创建一个名为`delete_s_trigger`的SQL级联删除(Cascade Delete)触发器,可以确保在删除`s`表中特定学生记录的同时,自动删除`s`表与`SC`表之间的关联记录。在这种模式下,当你删除`s`表中的学生,`SC`表中对应的学生的所有课程记录都会被删除。这种设置通常在两个表之间有依赖关系时使用。
首先,你需要确保`s`表和`SC`表之间有一个外键约束,比如`s_id`字段指向`s`表的主键,以便启用级联删除。以下是创建触发器的示例:
```sql
CREATE TRIGGER delete_s_trigger
AFTER DELETE ON s
FOR EACH ROW
WHEN MATCHED BY (DELETE_ID = OLD.ID) DO
BEGIN
DELETE FROM SC WHERE s_id = OLD.ID;
END;
```
这里假设`s`表有一个`ID`字段,并且我们在`SC`表中有一个`s_id`字段用于引用`s`表的记录。
现在我们尝试删除赵欣同学(0529),即执行以下命令:
```sql
DELETE FROM s WHERE ID = 0529;
```
删除操作完成后,你可以通过查询`SC`表来查看赵欣同学的课程记录是否已经被删除:
```sql
SELECT * FROM SC WHERE s_id IN (SELECT ID FROM s WHERE ID = 0529);
```
如果没有返回任何结果,说明`delete_s_trigger`触发器已经成功地删除了`SC`表中与0529相关的所有记录。
3.建立触发器tri_delete_s2,当删除student表中记录时,将SC表相应记录同时删除。设计用例进行测试。删除触发器tri_delete_s2。
创建触发器:
```
CREATE TRIGGER tri_delete_s2
AFTER DELETE ON student
FOR EACH ROW
DELETE FROM SC WHERE SC.s_id = old.s_id;
```
测试用例:
1. 在student表中删除id为1的记录,检查SC表中是否同时删除了相应记录。
2. 在student表中删除id为2的记录,检查SC表中是否同时删除了相应记录。
3. 在student表中删除id为3的记录,检查SC表中是否同时删除了相应记录。
删除触发器:
```
DROP TRIGGER tri_delete_s2;
```
阅读全文