欢迎来到天天文库
浏览记录
ID:62248588
大小:71.38 KB
页数:4页
时间:2021-04-22
《实验11:使用触发器加强完整性.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、GDOU-B-11-112广东海洋大学学生实验报告书实验名称实验11:使用触发器加强完整性课程名称数据库原理及应用成绩学院(系)软件学院专业软件工程班级学生姓名学号实验地点实验日期实验目的:1.掌握after和Insteadof触发器的使用方法实验内容1.创建触发器,当修改Orders表中某行数据的mShippingCharges和mGiftWrapCharges时,要修改相应行的总价mTotalCost,以保证结果的正确性。CREATETRIGGERtrigTotalCostONOrdersA
2、FTERUPDATEASBEGINIF(UPDATE(mShippingCharges)ORUPDATE(mGiftWrapCharges))BEGINDECLARE@orderIdCHAR(6)='';DECLARE@newShippingChargesMONEY=0;DECLARE@newWrapChargesMONEY=0;SELECT@orderId=cOrderNo,@newShippingCharges=mShippingCharges,@newWrapCharges=mGiftWrapChargesFROMINS
3、ERTED;UPDATEOrdersSETmTotalCost=(SELECTSUM(mToyCost)FROMOrderDetailWHEREcOrderNo=@orderId)+@newShippingCharges+@newWrapChargesWHEREcOrderNo=@orderId;ENDEND2.创建after触发器,禁止删除ToysBrand表中的记录。CREATETRIGGERtrigForbidDeleteBrandONToyBrandAFTERDELETEASBEGINPRINT'ToyBrand表中的
4、记录不能被删除'ROLLBACKTRANEND3.创建Insteadof触发器,禁止对Toys表进行删除操作。CREATETRIGGERtrigForbidDeleteToyONToysINSTEADOFDELETEASBEGINPRINT'Toys表中的记录不能被删除'END4.创建触发器,在Toys表中插入数据或者修改数据时,要保证siLowerAge小于siUpperAge的值,否则不能插入或修改。CREATETRIGGERtrigAgeCheckONToysAFTERINSERT,UPDATEASBEGINDECLAR
5、E@lowerAgeSMALLINT=0;DECLARE@upperAgeSMALLINT=0;SELECT@lowerAge=siLowerAge,@upperAge=siUpperAgeFROMINSERTED;IFNOT(@lowerAge<@upperAge)BEGINPRINT'siLowerAge必须小于siUpperAge';ROLLBACKTRAN;ENDEND5.创建触发器,禁止对Shoppers表进行任何更新(增删改)操作。CREATETRIGGERtrigForbidShopperChangeONShop
6、perINSTEADOFINSERT,UPDATE,DELETEASBEGINPRINT'不能对Shopper表进行增删改操作'END6.当Toys表中的玩具价格mToyRate增加时,创建一个触发器使得Toys表的mToyRate的属性的平均值不超过28美元,并且最大值不超过55美元。CREATETRIGGERtrigToyRateONToysAFTERUPDATEASBEGINIFUPDATE(mToyRate)BEGINDECLARE@avgMoneyMONEY=0;DECLARE@maxMoneyMONEY
7、=0;SELECT@avgMoney=AVG(mToyRate),@maxMoney=MAX(mToyRate)FROMToys;IF(@avgMoney>28OR@maxMoney>55)BEGINPRINT'平均值不能超过28美元,最大值不能超过55美元'ROLLBACKTRANENDENDEND7.对Shipment表进行插入操作或者修改操作时,应保证dShipmentDate小于当前日期。CREATETRIGGERtrigShipmentDateONShipmentAFTERINSERT,UPDATEASBEGINDE
8、CLARE@curDateDATE=GETDATE();DECLARE@newDateDATE;SELECT@newDate=dShipmentDateFROMINSERTED;IF(@newDate>=@curDate)BEGINPRINT'dShipmentDate必须小
此文档下载收益归作者所有