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