触发器(trigger)是指一种可以在满足某些条件时自动执行指定操作的机制。在数据库领域中,触发器通常被定义为某个表上的特殊类型的存储过程。
触发器是一种响应特定事件的机制。当表中满足某些特定的条件时,触发器就会被激活,随之执行相应的代码。这些条件可能包括在该表中执行的任何类型的 DML(包括 INSERT、UPDATE、DELETE),这也意味着,如果定义了一个针对某个表的触发器,那么无论使用何种方式对该表进行更新,都将去触发它。
按照触发器激活的不同时间,可以将触发器分为两类:在行级别上激活的触发器和在语句级别上激活的触发器。
在行级别上激活的触发器会在表中的每一行上执行,并且在 INSERT、UPDATE 或 DELETE 语句中可能涉及的每一行上执行,而在语句级别上激活的触发器,只执行一次,并且不管有多少行受到影响,都只执行一次。
在实际的开发中,使用触发器可以实现一些非常有用的功能,因此非常常用。首先它可以自动化执行一些复杂的业务逻辑代码,避免重复的代码量和人工操作;其次,它可以自动化维护数据库数据的完整性和正确性;最后,它可以自动执行一些与业务关联的后续操作。
然而,使用触发器也面临着一些缺点。首先是触发器的执行会占用系统的资源,导致性能下降;其次是如果触发器的逻辑有误,可能会导致不可预料的后果;最后,触发器也会导致代码的复杂性增加,增加开发和维护的难度。
触发器广泛应用于以下场景:
1)维护表之间的完整性:通过触发器,当在一个表上执行某个操作时,可以自动更新另一个表。
2)实现特殊的审计需求:通过触发器,可以在某个表上执行 INSERT、UPDATE 或 DELETE 时,记录下相关的元数据,例如创造/修改的时间、操作人员等。
3)安全性限定:通过触发器,可以在某个表上执行 DML 操作之前验证用户的身份。