当前位置:文档之家› 数据库实现触发器

数据库实现触发器


表的拥有者可以使用系统存储过程 sp_s触发器
Copyright@2008 5
使用触发器的考虑事项(续)
19.1.3 使用触发器的考虑事项
必须具有执行触发器内所有语句的权限 只有表的拥有者、sysadmin 固定服务器角色和 db_owner 与 db_ddladmin 固定数据库角色的成员 能创建和删除那个表的触发器。权限不能被转让 不能在临时表或系统表上创建触发器,但触发器可以引 用临时表 触发器可以包含返回结果集的语句,但不建议这么做 触发器的定义语句中可以包括 ROLLBACK TRANSACTION 语句,即使没有显式的 BEGIN TRANSACTION 语句
AFTER触发器(FOR触发器)
在INSERT、UPDATE 或 DELETE 语句执行后 触发
INSTEAD OF 触发器
取消触发动作,执行替代操作
Copyright@2008
9
创建触发器
19.2.2 创建触发器
创建触发器 其信息插入 sysobjects 和 syscomments 系统表中 用sp_depends,sp_helptext,sp_helptrigger查看 信息
通过使用触发器,可以在特定条件出现时调用预定义 或动态定义的定制错误信息
Copyright@2008 4
使用触发器的考虑事项
19.1.3 使用触发器的考虑事项
约束最先被检查
如果触发器表上存在约束,则它们在触发器执行之前 被检查。如果违反了约束,则触发器不执行
表对同一动作可以有多个触发器
SQL Server 2000 允许在单个表上多个触发器的嵌套。 一个表上可以有多个触发器,每个触发器可以定义为 单个动作或多个动作
Copyright@2008 6
第15章 实现触发器
触发器介绍 定义触发器 触发器的工作过程 触发器示例 性能考虑 推荐操作
Copyright@2008
7
定义触发器
19.2 定义触发器
触发器的种类 创建触发器 更改和删除触发器
Copyright@2008
8
触发器种类
19.2.1 触发器种类
从触发器执行时间上来分
只有表的拥有者具有删除触发器的权限,且权限 不可转移。但是 sysadmin 和 db_owner 角色的 成员可以通过在 DROP TRIGGER 语句中指定 拥有者的方式来删除触发器
Copyright@2008
12
第15章 实现触发器
触发器介绍 定义触发器 触发器的工作过程 触发器示例 性能考虑 推荐操作
Copyright@2008 15
INSERT 触发器的工作过程(续)
在定义了 INSERT 触发器的表上执行 INSERT 语句 触发器动作被执行
INSERT [Order触发器代码: Details] VALUES (10525, 2, 19.00, 5,Northwind 0.2) USE 1 在定义了 INSERT 触发器的表上 CREATE TRIGGER OrdDet_Insert ON [Order Details] 执行 INSERT 语句 Order Details FOR INSERT AS OrderID ProductID UnitPrice Quantity Discount 2 INSERT UPDATE 语句插入的行被记录下来 P SET 10522 10 = (P.UnitsInStock 31.00 7 0.2 UnitsInStock – I.Quantity) FROM AS P INNER 10523 Products 41 9.65 9 JOIN 0.15 Inserted AS I 3 触发器动作被执行 ON P.ProductID = I.ProductID
Copyright@2008
10
更改和删除触发器
19.2.2 更改和删除触发器
更改触发器
语法:ALTER TRIGGER 触发器名 …… 使用新的定义代替触发器原有的定义,触发动 作也可以更改
由于延迟名称解析,触发器可以引用触发器定 义时不存在的表,但是创建触发器时会收到一 条警告信息
禁用或启用触发器
第15章 实现触发器
触发器介绍 定义触发器 触发器的工作过程 触发器示例 性能考虑 推荐操作
Copyright@2008
1
触发器介绍
19.1 触发器介绍
触发器 触发器的优点 使用触发器的考虑事项
Copyright@2008
2
触发器
19.1.1 触发器
触发器是一类特殊的存储过程,不能被直接 调用,也不传递或接受参数 在指定的表中的数据发生变化时自动生效 响应 UPDATE、INSERT 或 DELETE 语句 触发器可以查询其他表,包含复杂的T-SQL 语句 触发器及触发它的语句被视为单个事务,可 以在触发器内的任何地方被回滚
语法:ALTER TABLE 表名 { ENABLE | DISABLE }
TRIGGER {ALL | 触发器名 [, …n] }
Copyright@2008 11
更改和删除触发器(续)
19.2.2 更改和删除触发器
删除触发器
语法:DROP TRIGGER 触发器名
若关联表被删除,则触发器自动删除
Copyright@2008
13
触发器的工作过程
19.3 触发器的工作过程
INSERT 触发器的工作过程 DELETE 触发器的工作过程
UPDATE 触发器的工作过程
INSTEAD OF 触发器的工作过程
Copyright@2008
14
INSERT 触发器的工作过程
19.3.1 INSERT触发器的工作过程
INSERT 触发器的工作过程
在定义了 INSERT 触发器的表上执行 INSERT 语句 INSERT 语句插入的行被记录下来 触发器动作被执行
inserted 表
触发 INSERT 触发器时,新行被同时增加到触发器表和 inserted 表中 inserted 表是保存了插入行的副本的逻辑表,它并不实际 存在于数据库中,而在缓存中 inserted 表允许用户引用 INSERT 语句所插入的数据,这 样触发器可以根据具体数据决定是否执行以及如何执行特 定语句
Copyright@2008
3
触发器的优点
19.1.2 触发器的优点
在数据库中的相关表上实现级联更改
在数据库的相关表上使用触发器可实现级联更新或删 除
强制比 CHECK 约束更复杂的数据完整性
和 CHECK 约束不同,触发器可以引用其他表中的列
触发器可以比较数据修改前后的表状态,并根据 其差异采取对策 定义用户定制的错误信息
CREATE TRIGGER 触发器名 ON 表或视图 [WITH ENCRYPTION] {FOR | AFTER | INSTEAD OF} { [INSERT][,] [DELETE] [,] [UPDATE] AS [IF UPDATE语句] 测试在指定列上进 sql_statement 行的UPDAE操作
相关主题