《数据库系统实验》
实验报告
题目 | 实验9——触发器的基本操作 |
一、实验环境:
1、操作系统:Windows 11 22H2;
2、DBMS :mysql 8.0 CE;
二、实验内容与完成情况
9.4 在sc表中创建insert、update触发器TR_SC_IN_SNO,要求插入选课记录或修改课表学生学号时,检查该学号是否为student表中的学号,若无则不许插入选课记录或修改选课表中的学生学号
我们分别编写两个触发器实现该功能。
功能1:插入选课记录时如果该学号不在student中,则报错;
delimiter //
create trigger TR_SC_IN_SNO after insert on sc
for each row
begin
if (new.sno not in (select sno from student))
then
SIGNAL SQLSTATE'45000'SET MESSAGE_TEXT = 'the sno is not in student';
end if;
END//
功能2:修改课表学生学号时如果该学号不在student中,则报错;
delimiter //
create trigger TR_SC_UP_SNO after update on sc
for each row
begin
if (new.sno not in (select sno from student))
then
SIGNAL SQLSTATE'45000' SET MESSAGE_TEXT = 'the sno is not in student';
end if;
END//
查看建立的trigger是否成功:
show triggers;
建立触发器结果如下图所示。
9.8 在sc表中录入或修改实验数据,查看触发器的执行情况
开始录入或修改实验数据之前,我们需要先解除sc表的外码约束。
ALTER TABLE sc DROP FOREIGN KEY sc_ibfk_1;
接着我们尝试录入实验数据:
insert into sc values ('2006005','2',80);
结果如下图所示。
接着我们尝试修改实验数据:
update sc set sno='2006005' where sno='2005005';
结果如下图所示。