资源描述:
《实验五:触发器和存储过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验五:触发器和存储过程一.实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。二.实验内容:有一个小型的图书管理数据库,包含的表为:bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表borrowcard(cardid,ownername);--借书证表borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表写一个存储过
2、程,实现借书操作,要求有事务处理。(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。(3)要求用触发器实现表的完整性控制。三、操作与运行1.创建图书数据库:createtablebookstore(bookidintnotnullprimarykey,booknamechar(20),bookauthorchar(20),purchasedatedatetime,statech
3、ar(4))createtableborrowcard(cardidintnotnullprimarykey,ownernamechar(20))createtableborrowlog(cardidintnotnull,bookidintnotnull,borrowdatedatetime,returndatedatetime,primarykey(cardid,bookid),---foreignkey(cardid)referencesborrowcard(cardid),---foreignkey(
4、bookid)referencesbookstore(bookid))通过以上语句,可以看到数据库中的表建立成功。2.创建存储过程:createprocbook_borrow@mycardid_inint,@mybookid_inint,@str_outchar(30)outputasbeginifnotexists(select*fromborrowcardwherecardid=@mycardid_in)beginset@str_out='该读者不存在'returnendif(selectstatefr
5、ombookstorewherebookid=@mybookid_in)='借出'beginset@str_out='该书以借出'endbegintraninsertintoborrowlogvalues(@mycardid_in,@mybookid_in,getdate(),null)if@@error>0beginrollbacktranset@str_out='执行过程中遇到错误!'returnendupdatebookstoresetstate='借出'wherebookid=@mybookid_i
6、nif@@error>0beginrollbacktranset@str_out='执行过程中遇到错误!'returnendif@@error=0begincommittranset@str_out='借书成功!'return1elsebeginrollbacktranset@str_out='执行过程中遇到错误!'returnendEnd查看执行结果:执行存储过程:当违反参照完整性时:declare@str_outchar(30)execbook_borrow1114060119,106,@str_out
7、outputprint'执行情况'+@str_out当图书已借出时执行结果会是:declare@str_outchar(30)execbook_borrow1114060114,102,@str_outoutputprint'执行情况'+@str_out当正常执行时(即不违反完整性时):原先的借书记录有:正常借书时:declare@str_outchar(30)execbook_borrow1114060116,105,@str_outoutputprint'执行情况'+@str_out查看借书记录:查看图
8、书在库状态:由此可知借书成功。3.创建触发器:createtriggerdelete_borrowlogonbookstorefordeleteasbegindeletefromborrowlogwherebookidin(selectbookidfromdeleted)End执行:deletefrombookstorewherebookid='102'结果:查看结束记录情况:可知删除触发器创建成功。create