创建触发器,当删除c表中的课程时,同时删除sc表关于此课程的数据。验证触发器功能。
时间: 2024-12-28 16:39:22 浏览: 7
创建触发器是为了在特定数据库操作(如删除)发生时自动执行某些预设的操作。在这个例子中,你需要创建一个数据库触发器,当从`c`表(假设是课程表)删除一条课程记录时,会自动删除与该课程相关的所有数据,即`sc`表(可能是学生选课表)中对应该课程的所有记录。
以下是创建这个触发器的基本步骤(这里以SQL语言为例,具体的语法可能会因数据库系统而异):
```sql
CREATE TRIGGER delete_course_data
AFTER DELETE ON c
FOR EACH ROW
BEGIN
DELETE FROM sc
WHERE sc.course_id = OLD.course_id; -- OLD关键字表示被删除的行
END;
```
这个触发器会在`c`表中删除一条课程记录后立即执行。它查找`sc`表中course_id等于被删除课程的id的所有行,并将其删除。
为了验证触发器是否工作正常,你可以尝试以下几个步骤:
1. 手动在`c`表中删除一条课程记录,然后检查`sc`表,确认是否有相应关联的数据已被删除。
2. 使用事务控制,在一个事务中删除课程并验证触发器效果,如果数据一致性保持,则说明触发器有效。
3. 可以在测试环境中故意触发删除操作,比如通过存储过程或应用程序代码,再次检查数据是否按照预期被删除。
相关问题
2(1)创建触发器sc_delete,当删除student表中的一条学生记录时,自动删除score表中对应学生的选课记录。 (2) 删除student表中的一条学生记录,验证触发器的作用。
1. 创建触发器:
```sql
CREATE TRIGGER sc_delete
AFTER DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM score WHERE student_id = OLD.student_id;
END;
```
2. 删除student表中的一条学生记录:
```sql
DELETE FROM student WHERE student_id = 1;
```
执行这个语句后,触发器会自动删除score表中对应学生的选课记录。可以通过以下语句验证:
```sql
SELECT * FROM score WHERE student_id = 1;
```
如果没有返回任何结果,说明触发器生效了,score表中对应学生的选课记录已被删除。
2. 创建一个触发器trigger_t1,当删除表student中某个学生的信息时,同时将sc表中与该学生有关的数据全部删除。 (1) 第一步创建触发器trigger_t1 (2) 第二步向student表插入数据('95006','小赵','M',19,'IS'),向sc表插入数据('95006',2,91.0) (3) 第三步查看student表和sc表 (4) 第四步从student表中删除学号为95006的学生信息 (5) 第五步再次查看student表和sc表学号为95006的学生信息是否删除成功
以下是在 SQL Server 中创建触发器,插入数据,查看数据,删除数据并验证的步骤:
1. 创建触发器:
```
CREATE TRIGGER trigger_t1
ON student
AFTER DELETE
AS
BEGIN
DELETE FROM sc WHERE sid IN (SELECT deleted.sid FROM deleted);
END;
```
2. 向 student 表和 sc 表中插入数据:
```
INSERT INTO student (sid, sname, ssex, sage, sdept)
VALUES ('95006', '小赵', 'M', 19, 'IS');
INSERT INTO sc (sid, cid, score)
VALUES ('95006', 2, 91.0);
```
3. 查看 student 表和 sc 表:
```
SELECT * FROM student;
SELECT * FROM sc;
```
4. 删除学号为 95006 的学生信息:
```
DELETE FROM student WHERE sid = '95006';
```
5. 再次查看 student 表和 sc 表:
```
SELECT * FROM student;
SELECT * FROM sc;
```
可以看到,触发器成功删除了与学号为 95006 的学生相关的 sc 表中的记录。同时,student 表中的学生信息也被删除了。
阅读全文