《数据库系统 》 实验报告
实验名称 触发器实验 实验地点 实验楼423 实验日期
一、实验目的及要求
- 掌握触发器的创建、修改和删除操作
- 掌握触发器的触发执行
- 掌握触发器与约束的不同
二、实验环境
Windows10,
SQL server2008
三、实验内容
- 创建触发器
(1) 启动SQL Server 查询编辑器,“S+学生学号”数据库。
(2) 在查询命令窗口中输入以下CREATE TRIGGER 语句,创建触发器。
为SC(学生选课)表创建一个基于UPDATE 操作和DELETE 操作的复合型触发器,当修改了该表中的成绩信息或者删除了成绩记录时,触发器被激活生效,显示相关的操作信息。
CREATE TRIGGER tri_UPDATE_DELETE_sc
ON SC
FOR UPDATE,DELETE
AS
IF UPDATE(Grade)
BEGIN
SELECT INSERTED.Con,DELETED.Grade AS 原成绩,
INSERTED.Grade AS 新成绩
FROM DELETED ,INSERTED
WHERE DELETED.Sno=INSERTED.Sno
END
ELSE IF COLUMNS_UPDATED()=0
BEGIN
SELECT 被删除的学号=DELETED.Sno,DELETED.Con,
DELETED.Grade AS 原成绩
FROM DELETED
END
ELSE
PRINT ‘更新了非成绩列!’
(3) 点击快捷工具栏上的快捷按钮,完成触发器的创建。
2. 触发触发器
(1) 在查询命令窗口中输入以下UPDATE SC 语句,修改成绩列,激发触发器。
UPDATE SC
SET Grade=Grade+5
WHERE Con=‘101’
(2)在查询命令窗口中输入以下UPDATE SC 语句修改非成绩列,激发触发器。
UPDATE SC
SET Con=‘113’
WHERE Con=‘103’
(3)在查询命令窗口中输入以下DELETE SC 语句,删除成绩记录,激发触发器。
DELETE SC
WHERE Con=‘102’
3. 比较约束与触发器的不同作用期
(1)在查询命令窗口中输入并执行以下ALTER TABLE 语句,为SC 表添加一个约束,使得成绩只能大于等于0 且小于等于100。
ALTER TABLE SC
ADD CONSTRAINT CK_Grade
CHECK(Grade>=0 AND Grade<=100)
(2)在查询命令窗口中输入并执行以下UPDATE SC 语句,查看执行结果。
UPDATE SC
SET Grade=120
WHERE Con=‘108’
(3) 在查询命令窗口中输入执行以下UPDATE SC 语句,查看执行结果。
UPDATE SC
SET Grade=90
WHERE Con=‘108’
4. 删除新创建的触发器
(1) 在查询命令窗口中输入DROP TRIGGER 语句,删除新创建的触发器。
(2) 点击快捷工具栏上的快捷按钮,删除触发器。
DROP TRIGGER tri_UPDATE_DELETE_sc
1.在Student 表中编写insert 的触发器,假如每个班的学生不能超过30 个,如果低于此数,添加可以完成;如果超过此数,则插入将不能实现。
go
create trigger tr
on student
for insert,update
as
declare @sno numeric
select @sno=sno from Student
if(@sno>30)
begin
print’插入不成功’
rollback
end
else
print’插入成功’
2. 在SC 表上编写update 触发器,当修改SC 表中的Grade 字段时将其修改前后的信息保存在SC_log 表中。
go
create trigger tri_update
on sc
for update
as
if UPDATE(Grade)
insert into sc_log select* from deleted
insert into sc_log select* from inserted
四、实验总结
触发器我的理解就是人为设置一个‘异常陷阱’,当用户对表中数据进行增删改时,会激活促发其执行相应的操作,也算是对表中数据的一种约束。