触发器

 
其他功能:
1 强化约束
2 跟踪变化
3 级联运行
 
触发器的优点如下:
  • 触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
  • 触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
  • 触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣(存储在 discounts 表中)的更新。
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
 
创建触发器前应考虑下列问题:
  • CREATE TRIGGER 语句必须是批处理中的第一个语句。将该批处理中随后的其它所有语句解释为 CREATE TRIGGER 语句定义的一部分。
  • 创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户。
  • 触发器为数据库对象,其名称必须遵循标识符的命名规则。
  • 虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。
  • 虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。不应引用系统表,而应使用信息架构视图。有关更多信息,请参见信息架构视图。
  • 在含有用 DELETE 或 UPDATE 操作定义的外键的表中,不能定义 INSTEAD OF 和 INSTEAD OF UPDATE 触发器。
  • 虽然 TRUNCATE TABLE 语句类似于没有 WHERE 子句(用于删除行)的 DELETE 语句,但它并不会引发 DELETE 触发器,因为 TRUNCATE TABLE 语句没有记录。
  • WRITETEXT 语句不会引发 INSERT 或 UPDATE 触发器。
创建触发器时需指定:
  • 名称。
  • 在其上定义触发器的表。
  • 触发器将何时激发。
  • 激活触发器的数据修改语句。有效选项为 INSERT、UPDATE 或 DELETE。多个数据修改语句可激活同一个触发器。例如,触发器可由 INSERT 或 UPDATE 语句激活。
  • 执行触发操作的编程语句。
多个触发器
一个表中可有同类型的多个 AFTER 触发器,前提条件是它们的名称各不相同;每个触发器可以执行多个函数。但是,每个触发器只能应用于一个表,而单个触发器可应用于三个用户操作(UPDATE、INSERT 和 DELETE)的任何子集。
一个表只能有一个给定类型的 INSTEAD OF 触发器。
触发器权限和所有权
CREATE TRIGGER 权限默认授予定义触发器的表所有者、 sysadmin 固定服务器角色成员以及 db_ownerdb_ddladmin 固定数据库角色成员,并且不可转让。
如果在某个视图上创建 INSTEAD OF 触发器,则所有关系链将断开(如果视图所有者不同时拥有视图和触发器所引用的基表)。对于不属于视图所有者的基表,表所有者必须单独地将必要的权限授予正阅读或更新该视图的任何人。如果同一用户拥有视图和基础基表,则视图和基础基表必须授予其他用户视图的权限,而非个别基表的权限。有关更多信息,请参见 使用所有权链。
在 Microsoft® SQL Server™ 2000 中可确定表中触发器的类型、触发器名称、触发器所有者,以及触发器创建的日期。
您还可以:
  • 获取触发器定义的有关信息,前提是触发器没有在创建或修改时进行加密。可能需要查看触发器定义以了解它使用的 Transact-SQL 语句,或了解它如何影响所在的表。
  • 列出指定的触发器所使用的对象。该信息可在数据库中的对象发生更改或删除时用来标识这些对象。
sp_helptrigger 的结果集包含 isafterisinsteadof 列,以报告触发器是 AFTER 触发器还是 INSTEAD OF 触发器。OBJECTPROPERTY 函数通过 ExecIsInsteadOfTriggerExecIsAfterTrigger 属性报告触发器是 AFTER 还是 INSTEAD OF 触发器。
如果需要修改触发器的定义,只需一个操作即可除去并重新创建触发器,或重新定义已有触发器。
如果更改触发器引用的对象名,则必须修改触发器使其文本反映新的名称。因此,在重命名对象前,首先显示该对象的相关性,以确定所建议的更改是否会影响任何触发器。
也可以重命名触发器。新名称必须遵守标识符规则。您只能重命名自己拥有的触发器,而数据库所有者可以更改任意用户的触发器名称。需重命名的触发器必须位于当前数据库中。
也可将触发器修改为对定义进行加密。
当不再需要某个触发器时,可将其删除。当触发器被删除时,它所基于的表和数据并不受影响。删除表将自动删除其上的所有触发器。删除触发器的权限默认授予在该触发器所在表的所有者。
 
。。。待续中。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值