对SQL SERVER 中触发器的深入研究

2023-07-21 11:02邢伟杰
计算机应用文摘 2023年14期
关键词:触发器应用

摘 要SQL SERVER 触发器是一个特定的数据信息存储程序 它由用户确定 并在消息表或数据库系统内容上进行处理 触发器无法被用户进行处理 也无法接收各种功能 它们通常由事件驱动 由DBMS函数实现 当用户在消息表中进行DELETE,INSERT,UPDATE 操作时 触发器会被激活 并能够进行相关的处理 为确保操作能够顺利完成 触发器必须遵守规定的限制原则 一旦触发器被运行 所有动作都将被视为一次事务处理 若事务未能成功完成 则DBMS 将回到事务开始前的状态触发器可以用来检查数据规范 条件和默认值的完整性 检测更复杂的信息 以及运行更复杂的业务逻辑 在此基础上 文章深入探讨SQL SERVER 触发器的种类 特性及其形成的2 种临时表 并着力阐述触发器在提升数据分析完整性方面的应用 及其相关的事宜 旨在为数据库系统设计者提供有效的参考 帮助其更好地控制数据完整性

关键词SQL SERVER 触发器 应用

中图法分类号tp311  文献标识码a

1 引言

数据库系统是信息系统开发和运行的基础,而其存储数据的准确性则是至关重要的。为确保数据的准确性,各种DBMS 提供了多种检测和检查方法,而灵活和合理地使用触发器可以有效地提升信息系统的数据准确性,一般而言,数据库系统开发人员会采用一些数据约束来确保数据的完整性。但是,当面对复杂的检查策略和操作时,SQL SERVER 提供了一种更加有效的方法———触发器。

2 SQL SERVER 触发器含义及分类

2.1 SQL SERVER 触发器含义

触发器是由事件驱使的数据存储过程,它可以被使用者定义在数据表上,并且可以被DBMS 自动调用运行。当使用者在数据表中进行任何操作,如更改、撤销、进入或建立资料数据库对象等,触发器将会自动响应,从而实现统计信息的有效管理和分析。

2.2 SQL SERVER 触发器分类

SQL SERVER 触发器能够根据引发事件的差异而分为Data Definition Language 和Data ManipulationLanguage 2 种,前者以数据编程语言为基础,后者以数据过程语句为基础。

DDL 触发器可以用来处理各种DDL 事情,包括用户进入和后退、CREATE、DROP、ALTER 语句等。它不仅可以用来检查标准数据库系统中的表结构和视图结构,还可以作为应用系统管理主要任务,以确保信息系统的安全性和可靠性。

DML 触发器是一种可以回应用户DML 执行行为的机制,它可以检查表或视图中的INSERT,DELETE和UPDATE 动作是否符合业务规则,从而确保数据的完整性,并且可以在DML 编辑数据时引发执行,以提高数据处理的效率和准确性。

DML 触发器可以根据在前面还是后面执行来划分,这种划分方式被称为INSTEAD OF 和AFTER(FOR)触发器。

INSTEAD OF 觸发器是一种在数据运算之前执行的程序, 它可以定义在视图或表上, 用于替代DELETE,UPDATE 和INSERT 等功能,从而实现信息的有效处理。每个INSTEAD OF 触发器只能被定义一次,以确保信息的有效处理,它可以在数据变动之前被调用,替代用户的操作语句,从而实现触发器所定义的操作,使用户能够更加轻松地完成任务。

在DML 语句结束执行后,AFTER(FOR)触发器会被激活,以检测被执行的信息是否合乎业务规则,若不合乎规则,则会回到该数据操作前的状态。在同一张数据表上,可以定义多个AFTER(FOR)触发器,而不仅仅是在表格中,AFTER 触发器可以在大量数据动作结束后被调动运行,根据变化后的信息,对相关业务规范做出审查,从而决定是否接受或拒绝这些变化。

3 临时表

SQL SERVER 在运行DML 触发器时,会产生2 种只读型临时表,即DELETED 表和INSERTED 表。它们仅出现在存储器中,其结构与激活DML 触发器的视图或基表相似,但功能却有所不同。

3.1 DELETED 表

DELETED 表是一个存储器,它只保存用于进行UPDATE 或delete 运算的旧数据行。当这些数据行被更新或移除时, 它们将从原有的基表中迁移到DELETED 表。

3.2 INSERTED 表

INSERTED 表是一个存储系统,它可以存储本次UPDATE 和INSERT 操作所产生的新数据行。当执行UPDATE 或INSERT 操作时,这些新数据行会被插入到基表中,并被复制到INSERTED 表中。

事实上,UPDATE 操作是由DELETE 和INSERT2个步骤组成的。在UPDATE 操作中,DBMS 会将需要更新的数据行从基表中移除, 并将其移动到DELETED 表中, 最后将新的数据行同样移入INSERTED 表和基表中。

4 SQL SERVER 触发器应用

触发器机制应该被视为Windows 系统的一种消息响应机制,它能够在数据表上实施更加复杂的检查和操作,同时提供更加精确和强力的数据信息控制功能。此外,DDL 触发器还能够用于各类应用管理,从而有效地提升数据库应用控制系统的可靠性。

4.1 实现CHECK 约束检查功能

DML 触发器可以灵活编写代码,以处理各种业务逻辑,因此它可以设置比CHECK 约束更加复杂、强大的数据检查规则。当数据库系统设计者需要发出差错消息以提醒用户时,CHECK 约束根本无法满足需求,而触发器可以有效地实现这一目标。并且当需要使用其他表格中的数据时,触发器可以提供有效的支持,而CHECK 约束则可以提供更多的灵活性和便利性。

4.2 数据库设计与批量数据导入

在信息系统工程设计中,表内部结构的改变和完善是不可避免的。因此,在表上设计各种限制以及表与表之间的引用关系等,都必须进行精确的计算,以确保数据库系统的正常运行。然而,由于表内部结构的变化,原有的完整性限制都必须被取消,而重新建立各种限制又会造成一定的不便,这就给设计者提出了极大的挑战。通过触发器来设置有关限制规定,能够在表内部结构发生变化时,快速禁用触发器,从V,)"而节省时间和精力,同时能够便捷地修复触发器的应用,大幅提高了信息系统产品设计和测试的效率。

5 合理选择触发器与完整性约束

数据完整性约束和触发器的作用机制各有不同,它们在完成不同任务时各有优势和不足。

5.1 首选完整性约束

一般而言,只要能够满足应用系统业务逻辑的完整性要求,就应该采取完整性约束措施。完整性是一个关系数据库系统的基本要求,它能够通过建立主鍵、外键、值域和用户定义的约束来实现。应用的完整性是至关重要的,因此应尽可能采用FOREIGNKEY 约束来强制执行。若完整性能够符合应用的需求,则应该通过CHECK 约束来确保执行的有效性[1~2] 。

5.2 使用触发器以满足复杂的特殊需求

触发器是一种有效的解决方案,它可以使用SQL语句来处理复杂的逻辑,从而满足完整性约束的要求。然而,它并不总是最优的选择,在完整性约束根本无法满足用户需求时,触发器就显得尤为重要。

5.2.1 CHECK 约束无法满足特殊检查

CHECK 条件虽然快速且效率高,但它无法满足所有检查要求。触发器能够根据需要定制更复杂、更强大的检查规则,而CHECK 条件只能用于同一个表中的数字,因此它只能通过逻辑表示或者同一个列的另一值来检验列值。一旦需要检验列值,触发器就能够提供有效地支持,从而使用户能够从多个表中获取有效的信息。比如,触发器能够从同一个数据库系统的SELECT 结果中接入或修改相关的信息,以便更准确地识别出列值。

5.2.2 对中间数据进行处理

当我们不关心表中某个字段的过去或现在的值,只想知道变化的程度时,虽然没有列表可以提供这些信息,但是可以通过触发器中的INSERTED 临时表和DELETED 临时表来计算出变化的程度,从而获得有关变化的信息。触发器可以检测数据在各个表中的变化,并根据这些变化采取相应的应对措施,以确保数据的准确性和完整性。

5.2.3 方便完整性更改

当表内部结构发生变化时,原有的完整性约束必须被删除,这使得数据库系统设计师面临着巨大的挑战,因为在再次创建表之前,必须先确保毫无疏漏,这会给数据库系统设计师造成极大的麻烦。触发器不仅仅关注表内部结构的变化,还关注表内部结构是否能够正常运行。因此,当表结构发生变化时,只需要禁用触发器,就能够为数据库系统开发者带来便利。在数据库系统开发过程中,应该先采用触发器来确保引用完整性, 然后在开发完成后, 将其更改为DRI[3~4] 。

6 SQL SERVER 触发器应用注意事项

6.1 触发器执行不是主动执行

AFTER 触发器是一种在事情产生后被启动的引发语言,它会将引发语言运行的结果记载在日志中,但并没有进行提交。这表明, 一旦触发器要求rollback,就必须取消此前已进行的一系列操作,从而影响系统性能。因此,触发器的效率取决于引发语言的工作量。约束是一种主动的行为,它们在实际语言产生之前就会发挥作用,以阻止失败的产生。约束的执行速度要比其他行为快得多,但是当引发语言变得更加复杂、影响数据量更大时,使用触发器可以带来更高的效率。

6.2 保持触发器简洁

触发器是一种特殊的事务,可以在语句结束时触发它。如果触发器语句包含大量的代码,那么触发器会持续运行很长时间,这意味着每一段代码都需要花费大量的时间来完成。触发器的执行需要一段时间,而SQL 语句则需要在触发器完成后才能正式执行。若触发器在执行过程中发现错误,则它会自动重新开始,这样一来,降低了整个应用系统的运行效率,导致性能下降。

6.3 尽量避免在触发器中回滚

尽管回滚是触发器中最常见的任务, 但由于AFTER 触发器在大部分操作完成后才会发生,因此回滚的成本较高,为了节省成本,推荐尽量采用DRI。在触发器中应用多条ROLLBACK 语句时,最好在完成启动触发器以前就发现可能存在的问题,并立即进行检查,以避免错误发生,而不是等到触发器发出回滚信号。触发器能够有效地防止或回滚偏离业务逻辑规律的动作,但应尽量避免使用回滚,因为它会导致大量动作被撤销,并增加系统运行的成本。尤其是当涉及大量信息时,或许会导致数据库系统服务质量急剧下降,所以,建议尽可能使用完整性约束,而不过度依赖触发器。

7 结束语

使用触发器能够协助数据库信息管理系统设计者和维护者实现繁杂的各种功能,从而提升信息系统的完整性。但是,应该谨慎使用触发器,因为过度使用会导致系统维护变得困难。所以,在数据库信息管理系统产品设计中,应尽可能采用DRI 来确保数据信息完全。通过适当应用触发器,能够有效保护数据表中的各种数据信息,使其更加安全可靠,极大地减少数据库信息管理系统设计者的操作量,从而达到事半功倍的效果。

参考文献:

[1] 王珊.数据库系统概论[M].北京:高等教育出版社,2012.

[2] 邹建.深入浅出SQL SERVER 2005 开发、管理与应用实例[M].北京:人民邮电出版社,2008.

[3] 李霞. SQL SERVER 约束在维护数据完整性中的运用[J].晋城职业技术学院学报,2012(5):16?19.

[4] 张峰.触发器在数据处理过程中的应用研究[J].计算机工程与科学,2008(5):156?158.

作者简介:

邢伟杰( 1981—), 硕士, 讲师, 研究方向: 计算机科学技术。

猜你喜欢
触发器应用
主从JK触发器逻辑功能分析
使用触发器,强化安全性
GM(1,1)白化微分优化方程预测模型建模过程应用分析
煤矿井下坑道钻机人机工程学应用分析
气体分离提纯应用变压吸附技术的分析
会计与统计的比较研究
对触发器逻辑功能转换的分析
触发器逻辑功能转换的两种方法