数据库实验五-触发器的基本操作

一、实验目的
学习和实践对触发器的创建、修改、使用、删除等的基本操作。
二、实验内容
(1)在DingBao数据库中针对PAPER创建插人触发器TR_ PAPER_ I、删除触发器TR_PAPER_ D、修改触发器触发器TR_ PAPER U。具体要求如下所示。
①对PAPER的插人触发器:插人的报纸记录,单价为负值或空时,设定为10元。
②对PAPER的删除触发器:要删除的记录,若正被订阅表CP参照时,级联删除订阅表中相关的订阅记录。
③对PAPER的修改触发器:当把报纸的单价修改为负值或空时,提示“输人单价不正确!”的信息,并取消修改操作。
(2)对PAPER表作插人、修改、 删除的多种操作,关注并记录3种触发器的触发情况
(3)创建DDL触发器,通过它能阻止对DingBao数据库表结构的修改或表的删除。
(4)创建与使用DDL触发器:在JXGL数据库中创建DDL触发器,拒绝对库中表的任何创建、修改或删除操作。
(5)能查看、修改、删除以上已创建的触发器。
三、实验结果
①对PAPER的插人触发器:插人的报纸记录,单价为负值或空时,设定为10元。
create trigger paper_insert on paper
for insert as
declare @ippr float ;
declare @ipno int;
select @ippr=ppr, @ipno=pno from inserted
begin
if @ippr<0 or @ippr is NULL
begin
update paper set ppr=10
where paper.pno=@ipno
end
end;

insert into paper values('000010','南昌早报',null);

②对PAPER的删除触发器:要删除的记录,若正被订阅表CP参照时,级联删除订阅表中相关的订阅记录。

create trigger paper_delete on paper
instead of delete as
declare @icount int
select @icount=count(*) from deleted ,cp where deleted.pno=cp.pno
if @icount>=1
begin
declare @ipno int
select @ipno=deleted.pno from deleted
delete from cp where cp.pno=@ipno
end;

delete paper where pno='000001';

③对PAPER的修改触发器:当把报纸的单价修改为负值或空时,提示“输人单价不正确!”的信息,并取消修改操作。
create trigger paper_uodate on paper
for update as
declare @ippr float
select @ippr=ppr from inserted
if @ippr<0 or @ippr is NUll
begin
raiserror('输入单价不正确!!',16,1)
rollback transaction 
end

(2)对PAPER表作插人、修改、 删除的多种操作,关注并记录3种触发器的触发情况

insert into paper values('000008','江西晚报',-1);
select * from paper;
select * from cp;
delete paper where pno='000001';

update paper set ppr=-10.5 where pno='000001';

(3)创建DDL触发器,通过它能阻止对DingBao数据库表结构的修改或表的删除

if exists(select * from sys.triggers where parent_class=0 and name='trigger_DDL_Table')

drop trigger trigger_DDL_Table on database
go
create trigger trigger_DDL_Table
on database
for drop_table,alter_table
as
print '触发器 trigger_DDL_Table 已禁止对表进行DDL的 drop、alter 操作'
rollback
go
drop table paper
alter table paper add cc int null default(1)

(4)创建与使用DDL触发器:在JXGL数据库中创建DDL触发器,拒绝对库中表的任何创建、修改或删除操作。
CREATE TRIGGER no_ddl_trigger
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE, CREATE_TABLE
AS
BEGIN
RAISERROR ('Not allowed to modify database tables', 16, 1) WITH NOWAIT
ROLLBACK;
END;

四、实验小结
在今天的数据库实验中,我深入学习了触发器的基本操作。通过创建触发器,我可以在数据库表上定义自动执行的操作,如插入、更新或删除数据时触发特定的动作。触发器的使用可以帮助确保数据的完整性和一致性,提高数据库的安全性和效率。在实验中,我学会了如何创建触发器、定义触发条件和执行操作。通过这次实验,我不仅掌握了触发器的基本概念和操作方法,还加深了对数据库设计和管理的理解。

posted @ 2024-06-18 15:02  冰露奇缘  阅读(38)  评论(0)    收藏  举报