触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字直接被调用。当对某一表进行诸如INSERT、UPDATE、DELETE这些操作时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。
触发器是一系列当在表中的数据进行修改时要执行的SQL语句的集合。在SQL Server中可以创建在表中插入、修改或删除数据时触发的触发器。触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。
触发器与表紧密相连,在表中数据发生变化时自动强制执行。在某一表格中插入记录、修改记录或删除记录时,如果该表有对应该操作的触发器,这个触发器就会被触发,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。在触发器中可以查询其他表格或者包括复杂的SQL语句。触发器和引起触发器执行的SQL语句被当做一次事务处理,因此可以在触发器中回滚这个事务。如果这次事务未获得成功,SQL Server会自动返回该事务执行前的状态。
1.触发器的作用
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有如下许多不同的功能。
1)强化约束(Enforce restriction)。触发器能够实现由主键和外键所不能保证的复杂的参照完整性和数据一致性,能够实现比CKECK约束更为复杂的限制。与CHECK约束不同,在触发器中可以引用其他表。
2)跟踪变化(Auditing Changes)。触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
3)级联运行(Cascaded Operation)。触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除、更新和插入)而该操作又导致该表上触发器被触发。
4)存储过程的调用(Stored Procedure Invocation)。为了响应数据库更新,触发器可以调用一个或者多个存储过程,甚至可以通过外部过程的调用而在DBMS(数据库管理系统)本身之外进行操作。
2.触发器的优点
触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外,一个表的同一类型(INSERT、UPDATE、DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。(www.xing528.com)
触发器还有助于强制引用完整性,以便在添加、更改或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
触发器有以下优点。
1)触发器是自动执行的,当表中的数据做了任何修改之后立即被激活。
2)触发器可以通过数据库中的相关表进行层叠更改。
3)触发器可以强制限制,这些限制比用CHECK约束定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。
3.触发器与存储过程的区别
触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须由用户、应用程序或者触发器来显式地调用并执行,而触发器是当特定事件出现的时候,自动执行或者被激活的,与连接到数据库中的用户或应用程序无关。
注意:
尽管触发器的功能强大,但是它们也可能对服务器的性能有害。因此,要注意不要在触发器中放置太多的功能,因为它会降低响应速度,使用户等待的时间增加。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。