实验11:使用触发器加强完整性
更新时间:2023-12-20 09:28:01 阅读量: 教育文库 文档下载
GDOU-B-11-112
广东海洋大学学生实验报告书
实验名称 实验11:使用触发器加强完整性 课程名称 学院(系) 学生姓名
数据库原理及应用
成绩
软件学院
专业
软件工程
班级
实验日期
学号 实验地点
实验目的:
1. 掌握after和Instead of触发器的使用方法 实验内容
1. 创建触发器,当修改Orders表中某行数据的mShippingCharges和mGiftWrapCharges时,要
修改相应行的总价mTotalCost,以保证结果的正确性。 CREATE TRIGGER trigTotalCost ON Orders AFTER UPDATE AS BEGIN
IF (UPDATE(mShippingCharges) OR UPDATE(mGiftWrapCharges)) BEGIN END END
2. 创建after触发器,禁止删除ToysBrand表中的记录。
CREATE TRIGGER trigForbidDeleteBrand ON ToyBrand AFTER DELETE AS BEGIN
PRINT 'ToyBrand 表中的记录不能被删除' ROLLBACK TRAN END
3. 创建Instead of触发器,禁止对Toys表进行删除操作。
CREATE TRIGGER trigForbidDeleteToy ON Toys INSTEAD OF DELETE AS BEGIN
PRINT 'Toys 表中的记录不能被删除' END
DECLARE @orderId CHAR(6) = ''; DECLARE @newShippingCharges MONEY = 0; DECLARE @newWrapCharges MONEY = 0;
SELECT @orderId = cOrderNo, @newShippingCharges = mShippingCharges,
@newWrapCharges = mGiftWrapCharges FROM INSERTED;
(SELECT SUM(mToyCost) FROM OrderDetail WHERE cOrderNo = @orderId) + UPDATE Orders SET mTotalCost =
@newShippingCharges + @newWrapCharges
WHERE cOrderNo = @orderId;
4. 创建触发器,在Toys表中插入数据或者修改数据时,要保证siLowerAge小于siUpperAge的
值,否则不能插入或修改。
CREATE TRIGGER trigAgeCheck ON Toys AFTER INSERT, UPDATE AS BEGIN
DECLARE @lowerAge SMALLINT = 0; DECLARE @upperAge SMALLINT = 0;
SELECT @lowerAge = siLowerAge, @upperAge = siUpperAge FROM INSERTED; IF NOT (@lowerAge < @upperAge) BEGIN END END
5. 创建触发器,禁止对Shoppers表进行任何更新(增删改)操作。
CREATE TRIGGER trigForbidShopperChange ON Shopper INSTEAD OF INSERT, UPDATE, DELETE AS BEGIN
PRINT '不能对 Shopper 表进行增删改操作' END
6. 当Toys表中的玩具价格mToyRate增加时,创建一个触发器使得Toys表的mToyRate的属性的
平均值不超过28美元,并且最大值不超过55美元。 CREATE TRIGGER trigToyRate ON Toys AFTER UPDATE AS BEGIN
IF UPDATE(mToyRate) BEGIN END END
DECLARE @avgMoney MONEY = 0; DECLARE @maxMoney MONEY = 0;
SELECT @avgMoney = AVG(mToyRate), @maxMoney = MAX(mToyRate) FROM Toys; IF (@avgMoney > 28 OR @maxMoney > 55) BEGIN END
PRINT '平均值不能超过28美元,最大值不能超过55美元' ROLLBACK TRAN
PRINT 'siLowerAge 必须小于 siUpperAge'; ROLLBACK TRAN;
7. 对Shipment表进行插入操作或者修改操作时,应保证dShipmentDate小于当前日期。
CREATE TRIGGER trigShipmentDate ON Shipment AFTER INSERT, UPDATE AS BEGIN
DECLARE @curDate DATE = GETDATE(); DECLARE @newDate DATE;
SELECT @newDate = dShipmentDate FROM INSERTED; IF (@newDate >= @curDate) BEGIN END END
8. Toys表和Toybrand表存在相同属性cBrandid,利用触发器实现两个表之间的限制方式的参照
完整性。
CREATE TRIGGER trigToysToToyBrand ON Toys AFTER INSERT, UPDATE AS BEGIN
DECLARE @brandId CHAR(3);
SELECT @brandId = cBrandId FROM INSERTED;
IF NOT (@brandId IN (SELECT cBrandId FROM ToyBrand)) BEGIN END END
CREATE TRIGGER trigToyBrandToToys ON ToyBrand AFTER UPDATE, DELETE AS BEGIN
DECLARE @brandId CHAR(3);
SELECT @brandId = cBrandId FROM DELETED;
IF EXISTS (SELECT cBrandId FROM Toys WHERE cBrandId = @brandId) BEGIN END END
PRINT @brandId + ' 在玩具表中被引用,不能删除或者更改!'; ROLLBACK TRAN;
PRINT @brandId + ' 在品牌表中不存在!'; ROLLBACK TRAN;
PRINT 'dShipmentDate 必须小于当前日期'; ROLLBACK TRAN;
9. 对于Recruitment数据库,创建一个视图名为vwCandidateContractRecruiter,其中包含了
外部候选人的代码,姓名,测试成绩,以及其对应的合同招聘人员的代码和名称。并对该进行更新,修改外部候选人代码为‘000049’的候选人,更改其测验成绩为87分,并更改相对应的合同招聘人员的名称为‘Roger Federal’。通过创建一个触发器使得能对该视图直接通过下面的Update语句进行更新。
update vwCandidateContractRecruiter set siTestScore=87, cName=’Roger Federal’ where cCandidateCode=’000049’
CREATE VIEW vwCandidateContractRecruiter AS
SELECT cCandidateCode, vFirstName, vLastName, siTestScore, ExternalCandidate.cContractRecruiterCode, cName FROM ExternalCandidate, ContractRecruiter WHERE ExternalCandidate.cContractRecruiterCode = ContractRecruiter.cContractRecruiterCode;
CREATE TRIGGER trigContract ON vwCandidateContractRecruiter INSTEAD OF UPDATE AS BEGIN
DECLARE @score SMALLINT = 0; DECLARE @name CHAR(35); DECLARE @candidateCode CHAR(6); DECLARE @code CHAR(4);
SELECT @score = siTestScore, @name = cName,
UPDATE ExternalCandidate SET siTestScore = @score WHERE cCandidateCode = @code;
UPDATE ContractRecruiter SET cName = @name
WHERE cContractRecruiterCode = @code;
END
@code = cContractRecruiterCode, @candidateCode = cCandidateCode FROM INSERTED;
正在阅读:
实验11:使用触发器加强完整性12-20
网络教育学习中心数据管理系统的设计与实现-精品文档12-13
2020银行职工个人工作总结08-23
这场纷扬的瑞雪作文450字07-13
小学安全自查自改情况汇报范文02-22
公路局直属分局开展结对帮扶工作总结报告08-05
杭州法院常用民事诉讼文书06-18
福建省大学生志愿服务欠发达地区计划2 0 1 0年实施方案01-18
未来一游作文800字06-23
统计局年中最新度工作总结范文04-04
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 触发器
- 完整性
- 加强
- 实验
- 使用