触发器还有助于强制
引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见
表关系。
其他功能:
1
强化约束
2
跟踪变化
3
级联运行
|
触发器的优点如下:
|
INSERT
触发器:
UPDATE
触发器:
DELETE
触发器:
每个触发器都有两个特殊的表:插入表(
insert
表)和删除表(
delete
表)。这两个表是逻辑表,是由系统管理的,存在在内存中,不是存在在数据库中,所以不允许用户对它直接修改。
Insert
表:
用于存储
INSERT
和
UPDATE
语句所影响的副本,即在
insert
表中临时保存了被插入或被更新后的记录行。
Delete
表:
用于存储
DELETE
和
UPDATE
语句所影响的副本,即在
delete
表中临时保存了被删除或被更新前的记录。
|
CREATE TRIGGER Trigger_name
ON table_name
[WITH ENCRYPTION] //
加密
FOR{[DELETE,INSERT,UPDATE]}
AS SQL
语句
|
参数:
Trigger_name
table_name
WITH ENCRYPTION
DELETE,INSERT,UPDATE
|
创建触发器前应考虑下列问题:
创建触发器时需指定:
多个触发器
一个表中可有同类型的多个 AFTER 触发器,前提条件是它们的名称各不相同;每个触发器可以执行多个函数。但是,每个触发器只能应用于一个表,而单个触发器可应用于三个用户操作(UPDATE、INSERT 和 DELETE)的任何子集。
一个表只能有一个给定类型的 INSTEAD OF 触发器。
触发器权限和所有权
CREATE TRIGGER 权限默认授予定义触发器的表所有者、
sysadmin 固定服务器角色成员以及
db_owner 和
db_ddladmin 固定数据库角色成员,并且不可转让。
如果在某个视图上创建 INSTEAD OF 触发器,则所有关系链将断开(如果视图所有者不同时拥有视图和触发器所引用的基表)。对于不属于视图所有者的基表,表所有者必须单独地将必要的权限授予正阅读或更新该视图的任何人。如果同一用户拥有视图和基础基表,则视图和基础基表必须授予其他用户视图的权限,而非个别基表的权限。有关更多信息,请参见
使用所有权链。
|
在 Microsoft® SQL Server™ 2000 中可确定表中触发器的类型、触发器名称、触发器所有者,以及触发器创建的日期。
您还可以:
sp_helptrigger
的结果集包含 isafter 和 isinsteadof 列,以报告触发器是 AFTER 触发器还是 INSTEAD OF 触发器。OBJECTPROPERTY 函数通过 ExecIsInsteadOfTrigger 和 ExecIsAfterTrigger 属性报告触发器是 AFTER 还是 INSTEAD OF 触发器。
|
如果需要修改触发器的定义,只需一个操作即可除去并重新创建触发器,或重新定义已有触发器。
如果更改触发器引用的对象名,则必须修改触发器使其文本反映新的名称。因此,在重命名对象前,首先显示该对象的相关性,以确定所建议的更改是否会影响任何触发器。
也可以重命名触发器。新名称必须遵守标识符规则。您只能重命名自己拥有的触发器,而数据库所有者可以更改任意用户的触发器名称。需重命名的触发器必须位于当前数据库中。
也可将触发器修改为对定义进行加密。
|
当不再需要某个触发器时,可将其删除。当触发器被删除时,它所基于的表和数据并不受影响。删除表将自动删除其上的所有触发器。删除触发器的权限默认授予在该触发器所在表的所有者。
|
。。。待续中。。。