第十一次数据库实验-触发器的建立与使用

2020-04-17 19:03

《数据库原理与应用》实验报告

(实验名称 : 触发器的建立与使用 )

专 业 班 级 学 号 学生姓名 指导老师

怀化学院计算机科学与技术系

2011年 12月13日

《数据库原理与应用》实验报告

实验名称: 触发器的建立与使用

一、实验目的

理解触发器的概念和作用;了解触发器的分类及触发条件;掌握触发器的定义及应用。

二、实验内容:

1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。

2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、update)执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发器。INSTEAD OF类型的触发器会在触发语句(insert、delete、update)执行之前被触发,并取代相应的触发语句。

3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。

SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED表中保存要向表中插入的所有行;当执行DELETE时,DELETED表中保存要从表中删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表中,修改后的行保存在INSERTED行中。

三、实验步骤与运行结果

1、针对employee表写一个DELETE触发器,显示删除的员工人数。 create trigger emp_delete on employee for delete as

declare @num int set @num=0

select @num=count(*) from deleted

- 1 -

print '删除的人数为:'+cast(@num as char(10))

delete from employee where sex='男'

drop trigger emp_delete

2、针对employee表写一个UPDATE触发器,限制每次工资额的变动不能超过原工资的20%。 create trigger update_emp on employee after update as

declare @new_salary float,@old_salary float select @old_salary=salary from deleted select @new_salary=salary from inserted

if ABS(@new_salary-@old_salary)>@old_salary*0.2

begin

print '每次工资额的变动不能超过原工资的20%' rollback transaction end

update employee set salary=salary*0.15

3、定义一个触发器,保证新添加的员工的工资不能超过5000元 create trigger upwy_emp on employee for insert as

if((select salary from inserted)>5000) begin

print '新添加的员工的工资不能超过5000元' rollback end

insert employee values('E0028','杨子','男','业务','职员','1980-12-1','1950-1-1',4600,'07345123596','昆明市')

insert employee values('E0029','陆毅','男','业务','职员','1980-12-2','1950-12-2',6200,'07343120496','上海市')

4、对sale_item表创建一个触发器,当插入一条销售明细记录时,如果该记录的产品数量超过5,则显示“欢迎成为本公司的VIP会员!” create trigger ins_sait on sale_item for insert as

if((select qty from inserted)>5) begin

print '欢迎成为本公司的VIP会员!' rollback

- 2 -

end

insert sale_item values('1004','P0008','6','10000','1996-11-10')

5、针对customer表,定义一触发器用来保证参照完整性,当删除某一客户时,将其它表中该客户相关的信息全部删除。

create trigger del_cus on customer instead of delete as

delete customer where cust_id in(select cust_id from deleted) delete sales where cust_id in(select cust_id from deleted)

delete customer where cust_name='客户乙'

select * from customer select * from sales 6、针对sales表,定义一触发器保证参照完整性(参照customer表),不允许向sales表中插入customer表中不存在的客户。

create trigger unin_sales on sales instead of insert as

if((select count(*) from customer where cust_id in(select cust_id from inserted))<0) begin

print'不允许向sales表中插入customer表中不存在的客户' rollback end

insert sales values (10002,'C0556','E0013',22700.00,'1996-11-10','I000000002')

drop trigger unin_sales 7、 针对employee表,定义一触发器用来保证实体完整性,阻止用户修改Employee表中的emp_no列。.

create trigger unaf_emp on employee for update as

declare @emp_id_i char declare @emp_id_d char

select @emp_id_i=emp_no from inserted select @emp_id_d=emp_no from deleted

if @emp_id_i<>@emp_id_d begin

print'不能修改employee表中的emp_no列' rollback

- 3 -

end

update employee set emp_no='45645' where emp_no='E0008'

四、实验总结

通过本次实验我学会了对触发器的使用和创建,以及如何修改触发器、删除触

发器。还学会了如何利用触发器创建的两个临时表INSERTED表和DELETED表进行修改操作。

- 4 -


第十一次数据库实验-触发器的建立与使用.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏东剧变对我国社会主义建设的启示

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: