触发器在程序设计中的应用

2019-09-10 07:22李艳杰曹金静
现代信息科技 2019年4期
关键词:触发器程序设计

李艳杰 曹金静

摘 要:触发器在程序设计语言中应用广泛,特别是在数据库设计中占有举足轻重的地位。它具有一触即发的特点,数据库中的表通常都是有联系的,如果一个表中的数据更新,而另一个与它相关联的表数据不更新,则会使两个表中的数据不能保持一致,导致数据出现错误,而触发器可以解决这个问题,使所有相关联的表中的数据保持一致性,本文主要论述触发器在SQL Server数据库管理中是如何实现数据一致性的。

关键词:触发器;程序设计;SQL Server

中图分类号:TP311.138 文献标识码:A 文章编号:2096-4706(2019)04-0030-02

The Application of Trigger in Programming

LI Yanjie,CAO Jinjing

(College of Electronic Information Engineering,Shandong Huayu University of Technology,Dezhou 253034,China)

Abstract:Triggers are widely used in programming languages,especially in database design. It has the characteristics of hair-trigger. The tables in the database are usually related. If the data in one table is updated and the data in the other table is not updated,the data in the two tables will not be consistent,resulting in data errors. Triggers can solve this problem and make the data in all associated tables consistent. This paper mainly discusses how triggers achieve data consistency in SQL Server database management.

Keywords:trigger;program design;SQL Server

0 引 言

在SQL Server数据库管理中,触发器是一项非常重要的技术,也是一种特殊的存储过程,具有一触即发的特点;它是基于一个表创建的,但是执行时可以操作多个有联系的表,所以可以对表实施复杂的完整性约束,当与触发器相关的表中数据发生改变时,触发器被自动激活,从而防止对数据进行不正确的修改。

1 触发器的作用

在数据库中,触发器能够实现主键和外键所不能保证的复杂的参照完整性和数据的一致性。举例说明:主表为学生表(学号,姓名),主键为学号;子表为成绩表(學号,成绩),外键为学号,为两个表建立完约束之后,则会有如下三条约束:一是子表中存在匹配的记录,主表中不能删除此记录,也不能更改主键的值;二是主表中没有的值,子表中也不能有;三是主表中的记录可以多于子表。所以,如果学生表删除(01,王建)这条记录,数据库会不允许删除,因为成绩表中存在此学号,但是利用触发器可以实现两个表中同时删除。

2 触发器的分类

触发器分两类:即DML触发器和DDL触发器。DML触发器是当数据库中发生数据操作语言(DML)事件(即对表中数据进行插入、删除、更新时)时执行的操作;DDL触发器是在响应数据定义语言(DDL)事件时执行的操作,DDL触发器一般用于执行数据库中的管理任务。例如:对表的创建、修改和删除,而非表中数据的。下面重点论述DML触发器。

3 DML触发器的工作原理

在SQL SERVER里,为每个DML触发器都定义了两个特殊的表,一个是插入(INSERTED)表,一个是删除(DEL ETED)表。这两个表是存在于数据库服务器的内存中的,是由系统管理的逻辑表,而不是真正存储在数据库中的物理表。INSERTED表对于插入记录操作来说,INSERTED表里存放的是要插入的数据;对于更新记录操作来说,INSERTED表里存放的是更新后的记录。DELETED表对于删除记录操作来说,DELETED表里存入的是被删除的旧记录;对于更新记录操作来说,DELETED表里存放的是更新前的记录。

3.1 DML触发器的语法结构

DML触发器的语法结构如下所示:

CREATE TRIGGER 触发器名称

ON 表名/视图名

FOR\AFTER\INSERT OF

UPDATE,INSERT,DELETE

AS

BEGIN

T—SQL 语句

END

3.2 选择After的应用

其中AFTER(FOR早期版本使用)选项,只能用于基本表,INSTEAD OF选项用于基本表和视图。当选择AFTER时,这类触发器是在记录已经改变完之后,才会被激活执行,它主要是用于记录变更后的处理或检查,一旦发现错误,也可以用ROLLBACK TRANSaCTION语句来回滚本次的操作。例:当SQL SERVER接收到一个要执行删除操作的SQL语句时,SQL SERVER先将要删除的记录存放在删除表里,然后把数据表里的记录删除,再激活AFTER触发器,执行AFTER触发器里的T—SQL语句。执行完毕之后,删除内存中的删除表,退出整个操作。

案例说明:在电子商务数据库中创建一个DML触发器,实现在用户信息表中删除用户时,显示“某某用户已被删除”。

CREATE TRIGGERT1

ON USERS \\USERS为表的名称

AFTER DELETE \\此处选择DELETE

AS

BEGIN

DECLARE @A VARCHAR(30) \\声明一个变量

SELECT @A=U_NAMEFROM DELETED

PRINT @A+'用户已被删除'

END

代码完成之后,当删除USERS表中的一条记录时,便会显示此用户已被删除的结果。

3.3 选择INSTEAD OF的应用

一个表中只能建立一个INSTEAD OF触发器,而AFTER可以建立多个。INSTEAD OF触发器,是在插入、更新、删除操作运行之前激活,不再去执行原来的SQL操作,而去运行触发器本身的SQL语句,而AFTER触发器,即在记录被更改或删除之后才被触发。

案例说明:创建触发器,要求不能删除电子商务数据库中订单表中的订单记录。

CREATE TRIGGERT2

ON ORDERS

INSTEAD OF DELETE

AS

PRINT '订单不能被删除'

当执行语句删除订单表中的记录时,会弹出“订单不能被删除”。

4 综合案例实现

建立两个表,表一:XUESHENG(XUEHAO CHAR(6), XINGM CHAR(10)),输入记录为:(11,WANGLING,(12, LIMING),表二:CHENGJI(XUEHAO CHAR(6),CH EN GJIFLOAT),输入记录为:(11,80),(12,60)。

根据两个表建立触发器,要求当在CHENGJI表中插入记录时,如果学号不在XUESHENG表中,则提示信息:此学生不存在,不能插入成绩,并加以验证;当在CHENGJI表中插入(13,90)这条记录时,提示信息不能插入。

CREATE TRIGGER T3

ONCHENGJI

AFTER INSERT

AS

BEGIN

DECLARE @A CHAR(6)

SELECT @A=XUESHENG.XUEHAO

FROMXUESHENG,INSERTED

WHEREXUESHENG.XUEHAO=INSERTED.XUEHAO

IF @AIS NULL

BEGIN

ROLLBACK TRANSaCTION

PRINT '插入不成功,此学生不存在'

END

END

通过下面的插入语句验证触发器的执行:

INSERTINTOCHENGJI VALUES(13,90)

执行此语句时,会提示插入不成功,此学生不存在。因为此学生的学号在XUESHENG表中不存在,说明没有学生存在,更不会有学生成绩,也就不允许插入此记录,所以通过触发器可以让多个表中的数据保持一致。

5 结 论

本文介绍了触发器的含义、作用、分类、语法结构,以及对DML触发器语法结构中关键字的解释,并举例编写代码说明触发器实现的过程,由此可见,对于多个表而言,若想实现程序设计中数据的参照完整性和数据的一致性,必须建立触发器来解决,并且要注意是在已经建好的表上建立触发器,还是在数据库上建立触发器,级别不同,选择的关键字也不同,实现的功能也不同。

参考文献:

[1] 刘丹,李楠.SQL Server触发器探析 [J].信息与电脑(理论版),2015(15):105-106+111.

[2] 邱吉苗,竺东杰,方飞波,等.基于医嘱触发器技术的药品不良反应监测研究 [J].中国数字医学,2016,11(9):56-57.

[3] 张海越,范曦.触发器在SQL Server数据库中使用的分析与研究 [J].数字技術与应用,2016(2):77.

[4] 陈雅.SQL Server数据库中触发器的应用研究 [J].电脑知识与技术,2017,13(12):1-2+12.

[5] 何勰绯.探析触发器在大型数据库中的应用 [J].中国信息化,2018(11):48-49.

作者简介:李艳杰(1978-),女,汉族,山东德州人,讲师,硕士,主要研究方向:数据挖掘技术;曹金静(1983-),女,汉族,山东德州人,教师,讲师,硕士,研究方向:电子信息、软件开发。

猜你喜欢
触发器程序设计
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
配置触发器有条件启动Windows服务
基于Multisim14.0的双D触发器应用与仿真
触发器在酒店管理系统中的应用
基于电路原理的触发器波形分析