实验11 触发器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验11 触发器

一、学习要求

(1) 通过实践理解触发器的概念、作用、优点。

(2) 掌握利用界面方式创建、修改和删除不同类型的触发器。

(3) 掌握利用命令方式创建、修改和删除不同类型的触发器。

二、实验内容

在已建立的TSGL***数据库的基础上,按如下要求对数据库进行操作,保存操作代码和截图,命名要求同前。

1.创建一触发器,当向借阅表插入一条记录时,检查该记录的借书证号在读者表中是否存在,检查该记录图书的ISBN号在图书表中是否存在,以及图书的库存量是否大于0,若有一项为否,则不允许插入,并提示操作失败。

create trigger Lend_insert

on Lend

after insert

as

declare@借书证号char(12),@ISBN编号char(16)

select@借书证号=借书证号from inserted

select@isbn编号=(select@ISBN编号from reader,lend where@借书证号

=reader.借书证号and reader.借书证号=lend.借书证号)

if(@借书证号not in(select*from reader.借书证号)

or@isbn编号not in(select*from book.isbn编号)

or exists(select*from book where库存量<=0))

begin

print'不允许插入'

end

2.创建一触发器,当删除读者表一条记录时,检查该记录的借书证号在借阅表中是否存在,如果存在,则不允许删除,并提示先归还在借图书。

create trigger delete_reader

on reader

for delete

as

declare@借书证号char(12)

select@借书证号=借书证号from inserted

if(@借书证号not in(select*from lend.借书证号))

begin

print'不允许删除,请先归还图书'

end

else

begin

print('删除成功')

end

3.创建一触发器,当读者借一本书(即向借阅表中插入一条记录)时,在读者表中,该读者的借书量应增加1,而图书表中该图书的库存量应减1。

create trigger table_insert

on reader after insert

as

begin

declare@借书证号char(12)

select@借书证号=借书证号from inserted

update reader set借阅数量=借阅数量+1

update book set库存量=库存量-1

end

4.创建一触发器,当读者还一本书(即向借阅表删除一条记录)时,在读者表中,该读者的借书量应减1,而图书表中该图书的库存量应加1。

create trigger table_delete

on reader after insert

as

begin

declare@借书证号char(12)

select@借书证号=借书证号from inserted

update reader set借阅数量=借阅数量-1

update book set库存量=库存量+1

end

5.创建一数据库作用域的DDL触发器,当删除一个表时,提示禁止该操作,然后回滚删除表的操作。

create trigger safety_datebase

on database

after drop_table

as

print'不能删除该表'

rollback transaction

6.创建一服务器作用域的DDL触发器,当删除一个库时,提示禁止该操作,然后回滚删除表的操作。

create trigger safety_server

on all server

after drop_database

as

print'不能删除该数据库'

rollback transaction

7.删除第3题创建的触发器,然后修改第1题创建的触发器,实现当向借阅表插入一条记录时,检查该记录的借书证号在读者表中是否存在,检查图书的ISBN在BOOK表中是否存在,以及图书的库存量是否大于0,若有一项为否,则不允许插入,如果条件满足,则向借阅表中插入一条记录后,修改读者表中借书量增加1,图书表中该书的库存量减1。

drop trigger table_insert

alter trigger Lend_insert

on Lend

after insert

as

declare@借书证号char(12),@ISBN编号char(16)

select@借书证号=借书证号from inserted

select@isbn编号=(select@ISBN编号from reader,lend where@借书证号

if(@借书证号not in(select*from reader.借书证号)

or@isbn编号not in(select*from book.isbn编号)

or exists(select*from book where库存量<=0))

begin

print'不允许插入'

end

else

begin

update reader set借阅数量=借阅数量+1

where@借书证号in

(

select借书证号

from redaer

)

update book set库存量=库存量+1

where@isbn编号in

(select isbn编号from reader)

End

8.利用sp_helptext查看第2题创建的触发器,然后将其修改为加密存储过程(with encryption),再查看其存储过程的文本信息。

alter trigger delete_Reader

on Reader with encryption after delete

as

declare@借书证号char(12),@ISBN编号char(16)

select@借书证号=借书证号from inserted

select@isbn编号=(select@ISBN编号from reader,lend where@借书证号

相关文档
最新文档