触发器是一类特殊的存储过程,当您使用一个或多个数据修改操作,如 UPDATE、INSERT 或 DELETE,在一个指定的表中修改数据时,它开始生效。触发器可以查询其它表,并且可以包括复杂的 SQL 语句。它们对于实施复杂业务规则或需求是非常有用的。例如,您可以控制在某个客户的当前帐号状态下,是否允许插入一个订单。
触发器对于实施参照完整性也很有用,参照完整性保留了当添加、更新、或者删除一些表中的行时,这些表之间的定义关系。然而,实施参照完整性的最好方法是在相关的表中定义主键和外部键约束。如果使用数据库图表,可以创建表之间的一个关系来自动创建一个外部键约束。
触发器在以下方面非常有用:
titles
表的 title_id
列写一个删除触发器,而引起删除其它表中的匹配行。该触发器使用 title_id
列作为一个唯一键,在titleauthor
、sales
和 roysched
表中定位匹配的行。titles
表中)打折扣(储存在 discounts
表中),那么触发器可以回卷该更新。
触发器是一个数据库对象,通过指定以下信息来创建:
在 Transact-SQL for Microsoft(R) SQL Server(TM) databases 或 PL/SQL for Oracle databases中编写触发器。
要创建一个触发器,请按照以下步骤执行:
用下面已经定义的SQL 语句创建一个新的触发器:
Create Trigger /*Trigger_Name*/ on /*Table_name*/ For /*Insert, Update, Delete*/ As print '
触发器激活'
行 | 替换 | 替换为 |
1 | /*Trigger_Name*/ |
要指定给触发器的名称 |
2 | /*Table_name*/ |
要附加触发器的表的名称 |
3 | /*Insert, Update, Delete*/ |
能激活该触发器的事务类型 |
例如,要对 employee
表的插入和更新事务创建一个名为 employee_insupd
的触发器,应该把触发器文本的前面三行更改为下面的内容:
Create Trigger employee_insupd
on employee
For Insert, Update
关于 Microsoft SQL Server 数据库触发器的例子,请参阅 SQL Server 文档中的 创建触发器。关于 Transact-SQL 有关触发器的语法的详细内容,请参阅 SQL Server 文档中的 CREATE TRIGGER 语句。
可以打开触发器来查看或者编辑一个存储在数据库中的已有触发器的文本。触发器脚本是用 Transact-SQL for Microsoft(R) SQL Server(TM) databases 或 PL/SQL for Oracle databases 编写的。
要打开一个触发器,请按照以下步骤执行:
-或者-
双击要打开的触发器的名称。
要把一个新的触发器添加到数据库,或者要更新一个现存的已修改过的触发器,可以保存一个触发器。
要保存一个触发器,请按照以下步骤执行:
已保存的触发器出现在触发器所附加到的表的“数据视图”的表文件夹中。
要禁止当指定事务发生后,在数据库上立即自动执行的触发器所定义的操作,可以删除该触发器。
如果您使用数据库图表来设计数据库,可能还想要删除那些在相关表之间实施参照完整性的触发器。为此目的,数据库图表使用关系而不是触发器。因此,如果一个触发器重复了数据库图表中的某个关系,应该删除该触发器或者是该关系。
要删除一个触发器,请按照以下步骤执行:
该触发器将被从数据库和“数据视图”中删除。