《2022年实验:使用触发器加强完整性实验报告.docx》由会员分享,可在线阅读,更多相关《2022年实验:使用触发器加强完整性实验报告.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 广 东 海 洋 大 学 学 生 实 验 报 告 书GDOU-B-11-112试验名称 试验七:使用触发器加强完整性 课程名称 数据库原理与应用 成果学院(系)专业 班级同学姓名 学号 试验地点 试验日期一、试验目的1. 把握 after 和 Instead of 触发器的使用方法二、试验内容按要求完成给出的以下题目,要求写出相应数据库的脚本语句;(要求写出储备过程的创建和执行语句;)1.创建触发器,当修改Orders 表中某行数据的mShippingCharges和 mGiftWrapCharges 时,要修改相应行的总价 mTotalCost
2、 ,以保证结果的正确性;2.创建 after触发器,禁止删除ToysBrand 表中的记录;siLowerAge 小于 siUpperAge 的值,否就3.创建 Instead of触发器,禁止删除ToysBrand 表中的记录;4.创建触发器,在Toys 表中插入数据或者修改数据时,要保证不能插入或修改;5. 创建触发器,禁止对 Shoppers 表进行任何更新(增删改)操作;6. 当 Toys 表中的玩具价格 mToyRate 增加时,创建一个触发器使得 Toys 表的 mToyRate的属性的平均值不超过 28 美元,并且最大值不超过 55 美元,否就不予修改;7. 对 Shipment
3、 表进行插入操作或者修改操作时,应保证 dShipmentDate 小于当前日期;8. 对于 Recruitment 数据库,创建一个视图名为 vwCandidateContractRecruiter,其中包含了外部候选人(ExternalCandidate 表)的代码, 姓名,测试成果, 以及其对应的合同聘请人员(ContractRecruiter表)的代码和名称;并对该视图进行更新,修改外部候选人代码为000049的候选人,更换其测验成绩为 87 分,并更换相对应的合同聘请人员的名称为Roger Federal ;通过创建一个触发器使得能对该视图直接通过下面的 Update 语句进行更新;
4、update vwCandidateContractRecruiter set siTestScore=87, cName=Roger Federalwhere cCandidateCode= 000049三、试验过程名师归纳总结 - - - - - - -第 1 页,共 4 页精选学习资料 - - - - - - - - - 1. CREATE TRIGGER tri1 ON Orders AFTER UPDATE AS IFUPDATE mShippingChargesOR UPDATE mGiftWrapCharges BEGIN DECLAREchange1MONEY +mGiftWr
5、apCharges DECLAREchange2MONEY SELECTchange1 =mShippingChargesFROM inserted SELECTchange2 =mShippingCharges+mGiftWrapCharges FROM deleted UPDATEOrders =mTotalCost+ change1 - change2 SETmTotalCostWHERE cOrderNo= SELECTcOrderNoFROM INSERTED END 2. CREATE TRIGGER tri2 ON ToyBrand AFTER DELETE AS ROLLBAC
6、K TRANSACTION 3. CREATE TRIGGER tri3 ON ToyBrand INSTEAD OF DELETE AS PRINT Can not delete 4. CREATE TRIGGER tri4_3 ON Toys AFTER UPDATE, INSERT AS DECLARE lage3 SMALLINT DECLARE uage3 SMALLINT SELECT lage3 =siLowerAge FROM inserted SELECT uage3 =siUpperAge FROM inserted IF lage3 = uage3 BEGIN PRINT
7、 Can not update or insert ROLLBACK TRAN END 5. 名师归纳总结 CREATE TRIGGERtri5 第 2 页,共 4 页- - - - - - -精选学习资料 - - - - - - - - - ON Shopper INSTEAD OF INSERT , DELETE , UPDATE AS PRINT Can not insert,delete and update. 6. CREATE TRIGGER tri6 ON Toys AFTER UPDATE AS DECLARE avgrate MONEY DECLARE maxrate MON
8、EY SELECT avgrate =AVG mToyRate FROM Toys SELECT maxrate =MAX mToyRate FROM Toys IF avgrate 28 OR maxrate 55 BEGIN PRINT Can not update. ROLLBACK TRAN END 7. CREATE TRIGGER tri7 On Shipment AFTER INSERT , UPDATE AS DECLARE date DATE DECLARE curdate DATE DECLARE redate INT SELECT date =dShipmentDate
9、FROM inserted SELECT curdate =GETDATE SELECT redate =DATEDIFF DD, date , curdate IF redate 0 BEGIN PRINT Can not insert or update. ROLLBACK TRAN END 8. - 创建视图名师归纳总结 - - - - - - -第 3 页,共 4 页精选学习资料 - - - - - - - - - CREATE VIEWvwCandidateContractRecruiter cCandidateCode, vFirstName, vLastName, siTestS
10、core, cContractRecruiterCode, cName AS SELECTExternalCandidate. cCandidateCode, vFirstName, vLastName, siTestScore, ContractRecruiter. cContractRecruiterCode, cName FROM ContractRecruiter, ExternalCandidate WHEREContractRecruiter. cContractRecruiterCode=ExternalCandidate. cContractRecruiterCode - 创建
11、触发器CREATE TRIGGER tri8 On vwCandidateContractRecruiter INSTEAD OF UPDATE AS DECLARE ccode CHAR 6 DECLARE testscore SMALLINT DECLARE crcode CHAR 4 DECLARE name CHAR 35 SELECT ccode =cCandidateCode FROM inserted SELECT testscore =siTestScore FROM inserted SELECT crcode =cContractRecruiterCode FROM ins
12、erted SELECT name=cName FROM inserted UPDATE ExternalCandidate SET cCandidateCode =ccode , siTestScore =testscore WHERE cCandidateCode =ccode UPDATE ContractRecruiter SET cName =name WHERE cContractRecruiterCode =crcode 四、试验总结通过这次试验 , 我基本把握了 SQL Server 的after和Instead of触发器的使用方法,这次试验对我以后的学习供应了很大的帮忙,让我熟识了数据库实现简洁查询;指导老师 日期名师归纳总结 注: 请用 A4 纸书写,不够另附纸;第页,共页第 4 页,共 4 页- - - - - - -