数据库系统概论实验报告五
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山西大学计算机与信息技术学院实验报告
图5-1 图5-2
例1:
当输入Insert into Student1 values (200724108,’王阳’,‘男’, 36, ‘计算机’);
建立的触发器执行了其功能,执行结果为
例2:
create trigger ss
on student
for insert
as
begin
declare @xh smallint;
select @xh=inserted.Sage
from inserted;
if exists(select Sno from student where Sage=@xh) update student set sage=@xh+1 where Sage=@xh; end;
当执行以下语句时
use TestDB
insert into student
values('200515124','zp','男',20,'ma'); 结果中Sage为20的元组都加上了1。
例3:
创建触发器如下:
触发器所产生的效果:
例4:
创建触发器:
执行SQL语句:
结果使student表中的所有元组的sage均变为20:
思考题
在数据库Company_Data的表"项目数据表"和"员工数据表"中分别创建触发器。
(1)打开查询编辑器。
(2)在查询窗口书写CREATE TRIGGER语句,基于表"员工数据表"创建AFTER
INSERT 触发器Tigger_NewEmployeeSalary,将插入员工的工资额限制在
5000以内。
use TestDB
GO
CREATE TRIGGER Trigger_NewEmployeeSalary
ON员工数据表
AFTER INSERT
AS
IF(SELECT工资FROM inserted)> 5000
BEGIN
PRINT'新员工工资不能超过'
ROLLBACK
END
GO
点执行后触发器创建成功。
在查询编辑器中写如下语句,用于测试上述触发器是否起作用:
insert into Employee (编号,工资)values(10,6000);
点击执行后会提示以下信息(说明触发器已起到作用)
(3)在查询窗口书写CREATE TRIGGER语句,基于表"员工数据表"创建AFTER UPDATE触发器Trigger_SalaryChange,将员工工资变动额限制在2000以内。
CREATE TRIGGER Trigger_SalaryChange
ON员工数据表
AFTER UPDATE
AS
IF UPDATE(工资)
BEGIN
IF(SELECT MAX(ABS(inserted.工资- deleted.工资))
FROM inserted JOIN deleted
ON inserted.编号= deleted.编号)> 2000
BEGIN
PRINT'工资变动不能超过'
ROLLBACK TRANSACTION
END
END
点击执行后触发器就创建成功了。
在查询编辑器中写如下语句,用于测试上述触发器是否起作用:
Update 员工数据表set工资=10000 where姓名='李四';
四、实验结果及分析:
1、通过实验了解了触发器的触发过程和类型,掌握创建触发器的方法,能够根据题目要求设计出触发器。
2、在创建触发器中,系统会临时生成一个inserted或deleted表,对触发器的一些操作都用到这些表。
教师
评语。