2024年3月9日发(作者:)
情境10、学生成绩管理系统触发器使用
工作目的
1、能正确理解触发器的概念
2、掌握企业管理器和Transact-SQL语句管理触发器
0
0
0
0
3、掌握存储过程传递参数
工作任务
0
0
一、创建触发器
1、用图形工具创建触发器
发器执行。
0
0
创建一个添加记录后显示提示信息的触发器tr_information1,并添加一条用户记录验证触
0
(1)启动SSMS,右键“对象资源管理器” ->“数据库” ->“StudentDB” ->“表”
->“student” ->“触发器”,选择“新建触发器”。
(2)根据触发器模板输入如下代码:
0
0
CREATE TRIGGER _information1
ON t
0
0
0
AFTER INSERT
AS
PRINT (‘友情提示:表中增加新记录’)
0
0
0
GO
(3)单击工具栏上的“执行”按钮完成触发器创建过程。
0
创建一个添加记录后显示提示信息的触发器tr_information1,并添加一条用户记录验证触
发器执行。
(4)使用INSERT语句向Student表添加一条记录,验证触发器功能。
0
0
INSERT Student
VALUES('082034118','赵小敏','女','1990-5-15','0820341')
0
0
创建一个实现在student中删除用户信息时显示“XXX同学已被删除!”的触发器。
0
(1)在“新建查询”编辑区输入如下代码:
CREATE TRIGGER tr_delete
ON Student
FOR DELETE
AS
BEGIN
0
0
0
0
0
0
0
DECLARE @name VARCHAR(12)
SELECT @name=sName FROM DELETED
PRINT @name + ’同学已被删除’
0
0
0
EDN
(2)单击“执行”按钮。
0
(3)验证触发器,输入代码:
DELETE FROM student WHERE sName=’刘峰一’
二、查看触发器
0
0
0
1、 用图形工具查看触发器
0
查看触发器tr_delete的定义信息 。
(1)启动SSMS,右键“对象资源管理器” ->“数据库” ->“StudentDB” ->“表”
->“student” ->“触发器” ->“tr_delete” ,选择“编写触发器脚本
为”->“CREATE到” ->“新查询编辑器窗口”。
0
0
(2)在弹出的查询窗口中查看“tr_delete”的定义信息。
[例11-4]查看触发器tr_delete依赖关系。
0
0
(1)启动SSMS,右键“对象资源管理器” ->“数据库” ->“StudentDB” ->“表”
->“student” ->“触发器” ->“tr_delete” ,选择“查看依赖关系”。
0
(2)在弹出的窗口中查看“tr_delete”的依赖关系。
2、用代码查看触发器
0
0
0
(1)查看触发器tr_information1一般信息
sp_help tr_information1
0
(2)查看触发器tr_information1定义正文信息
sp_helptext tr_information1
(3)查看触发器tr_information1依赖关系
sp_depends tr_information1
三、修改触发器
0
0
0
0
0
1、用图形工具修改触发器
修改触发器tr_delete,实现在Student中删除用户信息时,显示“注意:XXX同学已被删
0
除!”。
(1)启动SSMS,右键“对象资源管理器” ->“数据库” ->“StudentDB” ->“表”
->“student” ->“触发器” ->“tr_delete” ,选择“修改”。
0
0
(2)在编辑窗口修改代码如下:
ALTER TRIGGER [tr_delete]
ON [dbo].[Student]
FOR DELETE
AS
0
0
0
0
0
BEGIN
DECLARE @name VARCHAR(12)
0
0
END
SELECT @name=sName FROM DELETED
PRINT '注意:' + @name + '同学已被删除' ------增加了“注意:”
0
0
0
0
(3)单击工具栏上的“执行”按钮。
2、用代码修改触发器
修改触发器tr_information1,当student表添加、删除、修改记录后显示“友情提示:
0
Student表数据发生变化”提示信息。
在新建查询编辑区输入如下代码后执行:
0
0
ALTER TRIGGER [tr_information1]
ON [dbo].[Student]
AFTER INSERT,DELETE,UPDATE --增加了触发事件
0
0
0
AS
0
0
PRINT('友情提示:student表数据发生变化') --提示内容做了修改
四、禁用与启用触发器
1、用图形工具禁用与启用触发器
0
0
禁用和启用触发器tr_delete。
(1)启动SSMS,右键“对象资源管理器” ->“数据库” ->“StudentDB” ->“表”
0
->“student” ->“触发器” ->“tr_delete” ,选择“禁用”。
0
(2)在弹出的对话框中单击“关闭”按钮。
2、用代码编辑器禁用与启用触发器
0
(3)启用触发器的方法与禁用触发器基本相同。
0
0
(1)禁用触发器tr_delete语句如下:
DISABLE TRIGGER tr_delete ON student
(2)启用触发器tr_delete语句如下:
ENABLE TRIGGER tr_delete ON Student
五、删除触发器
1、用图形工具删除触发器
删除触发器tr_delete。
0
0
0
0
0
0
0
(1)启动SSMS,右键“对象资源管理器” ->“数据库” ->“StudentDB” ->“表”
->“student” ->“触发器” ->“tr_delete” ,选择“删除”。
0
(2)在弹出的对话框中单击“确定”按钮。
2、 用代码编辑器删除触发器
用代码编辑器删除触发器tr_information1的代码为:
0
0
0
DROP TRIGGER tr_information1
六、触发器应用实例
0
0
创建一触发器:如果在Student表中添加或更改数据,则向客户端显示一条警告信息。
CREATE TRIGGER tr_warn ON student
FOR INSERT,UPDATE
AS
0
0
0
0
0
RAISERROR(‘危险,你正在更新数据表!’,16,1) --返回警告信息
修改在学生关系数据库中学生表定义的触发器tr_warn。
ALTER TRIGGER tr_warn
0
0
ON student
0
0
FOR UPDATE --减少了触发事件
AS
0
RAISERROR(‘危险,你正在更新数据表!’,16,1)
在studentDB数据库中创建一个触发器,实现在修改表时弹出提示信息“数据表已被修
0
改!”。
CREATE TRIGGER tr_altertable
ON DATABASE
0
0
0
FOR ALTER_TABLE --修改表结构
AS
BEGIN
PRINT‘数据表已被修改’
END
0
0
0
0
0
使用DDL触发器来防止数据库中的数据表被删除。
CREATE TRIGGER Tri_Safe
0
0
AS
ON DATABASE
FOR DROP_TABLE
0
0
0
0
BEGIN
0
PRINT ‘有人试图删除数据表!’
ROLLBACK --撤消对数据表的删除
END
0
0
禁用DDL触发器Tri_Safe。
DISABLE TRIGGER Tri_Safe ON DATABASE
启用DDL触发器Tri_Safe。
ENABLE TRIGGER Tri_Safe ON DATABASE
删除DDL触发器Tri_Safe。
0
0
0
0
0
DROP TRIGGER Tri_Safe ON DATABASE
确保向Grade表添加的教师工号(tNo)存在于teacher表中,课程编号(cNo)存在于course
0
表中,而学生学号(sNo) 存在于student表中。
CREATE TRIGGER tr_insert
ON Grade
FOR INSERT
0
0
0
0
AS
IF ((NOT EXISTS
0
0
0
(SELECT tNo FROM teacher WHERE tNo IN (SELECTtNo FROM inserted)))
OR (NOT EXISYS (SELECT cNo FROM course WHERE cNo IN
0
(SELECT cNo FROM inserted))) OR (NOT EXISTS (SELECT sNo FROM student
WHERE sNo IN (SELECT sNo FROM inserted))))
BEGIN
0
0
0
PRINT ‘添加记录操作不能完成!’
PRINT ‘输入的教师工号、课程编号或学生学号有错误。’
0
0
ROLLBACK TRANSACTION
END
0
0
项目实现
图书借阅管理系统(LMIS)中存储过程的使用
0
0
在bookDB数据库中创建一个触发器tr_lendBook,实现在借书表lend中借出一本书的同时,
在图书信息表Book中将该书的库存量自动减1。
在bookDB数据库中创建一个DDL触发器tr_SAFE,实现对数据表的保护。
0
0
总结
0


发布评论