资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
实验七:触发器的应用1、 实验目的l 掌握DML和DDL触发器的创建方法;l 掌握DML和DDL触发器的查看、修改、重命名和删除方法。2、 实验内容(1) 创建触发器(1) 创建一个当学生表中插入一个新同学信息时能自动列出全部同学学生信息的触发器Display_trigger;向学生表中插入一新同学信息,验证触发器Display_trigger是否被执行。 create trigger display_triggeron studentafter insertasbeginselect * from student end (2)创建一个触发器delete_trigger,当向学生表中删除同学信息时显示学生表中以下信息进行了删除操作:并将删除的的学生信息显示出来。验证触发器delete_trigger是否被执行。create trigger delete_trigger on studentafter deleteasbeginselect 学生表中以下信息进行了删除操作:select * from deletedend(3)创建一个DML触发器ins_sub_score,当对成绩表添加一条数据时,首先判断一下学号和课程号在学生表和课程表是否存在,若不在,拒绝插入。CREATE TRIGGER ins_course_score on course_score after insert ASBEGIN IF EXISTS(SELECT * FROM inserted a WHERE a.stu_id not in ( SELECT b.stu_id FROM students b ) or a.cour_id not in (SELECT c.cour_id FROM courses c) ) BEGIN RAISERROR(违背了数据的一致性,16,1) ROLLBACK TRANSACTION ENDELSERAISERROR(插入成绩记录成功!,16,10)ENDGO (4)在stusystem数据库中创建删除班级触发器remofve_class,作用是:如果要删除一个班级,则首先需要删除其他表中与该班级有关联的信息。即:删除cla_sub表中与该班有关的记录,也就是取消改班级与相关科目的关联关系;删除cla_tea表中与该班有关的记录,也就是取消改班级与教师的关联关系;删除student表中与该班有关的记录,也就是删除该班级的学生及achievement表中学生的成绩信息。create trigger remofve_class on classafter deleteasbegindelete cla_sub where claid in(select claid from deleted)delete cla_tea where claid in(select claid from deleted)delete achievement where stuid in (select stuid from student where claid in (select claid from deleted)delete student where claid in(select claid from deleted)end 验证触发器:delete class where claid=6注意:输入测试数据进行前后对比select * from class where claid=6select * from cla_sub where claid=6select * from cla_tea where claid=6select * from student where claid=6select * from achievement where stuid=9(2) 练习和管理触发器 建立数据库testdb,并在数据库中建立两个表:Txl(ID int, Name char(10), Age int);Person_ counts(Person_ count int)create table tx1(ID int, name char(10), Age int ) create table person_counts (p_count int)l 使用T-SQL编写一个触发器tr_person_ins,每当txl表中插入一行数据时,表Person_ counts中对应的数量也相应地发生变化。create trigger tr_person_ins on tx1after insertasbegin if (select p_count from person_counts) is null) insert into person_counts values(0)update person_counts set p_count=p_count+(select COUNT(*)from inserted)end执行触发器:insert into tx1 values(3,a,20)l 使用对象资源管理器创建一个触发器tr_person_del,每当txl表中删除记录时,表Person_ counts中对应的数量也相应地发生变化。create trigger tr_person_del on tx1after deleteasbegin if (select p_count from person_counts) =0) beginprint 人数已为returnendelseupdate person_counts set p_count=p_count-(select COUNT(*)from deleted)end执行触发器:delete tx1 where ID=2参考答案2:根据上述两题建立一个触发器,代码如下:create trigger tr_person_ins on tx1after insert,deleteasbegin declare n intif (select p_count from person_counts) is null) insert into person_counts values(0)select n=COUNT(*)from tx1update person_counts set p_count=nendl 使用对象资源管理器和T-SQL语句两种方法查看触发器tr_person_del的内容,并将该触发器的内容加密。 sp_helptext tr_person_dell 使用T-SQL命令删除该触发器。 drop trigger tr_person_del二、讲解、演示及提供辅导材料1. 讲解实验要求。2. 通过广播系统演示并讲解实验内容。3. 动画演示操作并提供实验要求电子版及实验报告模板。三、个别辅导
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号