导航
  • 主页
  • API 调用
  • 基础类
  • 控件与界面
  • 数据库相关
  • DataWindow
  • 项目管理
  • Web 应用
  • 脚本语言

送分:请高手讲解一下触发器(用法以及用途)

fallstone 2002-03-04 07:40:15
我是菜鸟我怕谁?呵呵,谢谢高手,先!
...全文
52 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallstone 2002-03-27
感觉意犹未尽!
回复
taber 2002-03-07
我的理解:
触发器运行在数据库后台,监控着数据的插入、删除和修改,当数据发生这些改动时,相应的触发器就会运行,具体运行的代码是一系列自定义的sql语句。
因此可以将触发器理解为自动运行的sql语句模块。
这样做的好处显而易见。对于数据库的表来说,数据的基础动作只有增删改,对应这三种动作有三种触发器,这样它就可以监控数据库的一举一动了。更为重要的是,由于触发器定义在每张具体的表上,所以这使得它更有针对性和可维护性了。
关于触发器的语法你可以参阅相关书籍或者比较大的数据库里的例库的触发器。
回复
long5 2002-03-07
这里有我自己编的一个小例子,不知道对在下是否有帮助,现将例子发过去...
触发器应用一例
1:在借书表中创建触发器,它在一本书归还之后(当行从借书表中删除时)。它后自动将图书状态改为借出
CREATE TRIGGER load_delete
ON load FOR DELETE
AS
IF EXITS(SELECT * FROM INSERTED)
BEGIN
PDATE COPY SET on_loan = ‘N’
FROM COPY c INNER JOIN inserted i
ON c.isbn = i.isbn and c.bookno = i.bookno
EDN
ELSE
BEGIN
PDATE COPY SET on_loan = ‘N’
FROM COPY c INNER JOIN deleted d
ON c.isbn = d.isbn and c.bookno = d.bookno
EDN


2:当你从还书表删除一条记录时,自动触发上述触发器

当前很多商务应用把很多规则都集成到服务器端,以节省网络资源,同时加快客户操作(对服务器)
注:
同理可以在借书表中写insert触发器
回复
pblynx 2002-03-07
up,关注
回复
xiaozg118 2002-03-07
好,关注!!!
回复
onice 2002-03-07
触发器
触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。

触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。

使用触发器的优点
触发器的优点如下:

触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。


触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。


触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣(存储在 discounts 表中)的更新。
回复
2000pinbo 2002-03-07
我从网上查的,主要是为了挣分,希望有帮助



数据库触发器应用

段云光

(贵州工业大学 计算机科学与工程系,贵州 贵阳 550003)

摘 要 讨论了数据库中触发器的创建、组成、使用等问题。

关键词 数据库;触发器

中图分类号 TP315 文献标识码 B

0 前 言

大多关系型数据库系统:如oracle、sybase、DB2等均支持对数据库触发器(data base triggers)的使用。触发器是一种特殊类型的存贮过程,它在插入、删除或修改特定表中数据时起作用。触发器通过维持不同表中逻辑上相关数据的一致性,保持数据的相关完整性。

触发器的主要特点在于,不管何种原因造成数据变化,它均能够自动响应。因此,与存贮过程相类似,在当今数据库系统的建立中,系统开发人员大多使用触发器,极大推进了系统建立的质量。本文以oracle公司的oracle 7数据库系统所支持的触发器为例,就触发器的创建、组成、使用作一介绍。

1 触发器的创建及使用时机

当针对某特定表的insert,update或delete语句执行时,用户所定义的过程被隐含执行,这个过程就叫做数据库触发器。触发器可以作为一个单元而执行的sql及pl/sql语句,并可调用存贮过程,但存贮过程与触发器在被执行的方式上完全不同。存贮过程是被用户应用触发器显式调用的,而触发器则是当insert,update或delete语句执行时,由数据库系统点火的(fired),不管与其相连的用户及应用程序。触发器被存贮于数据库中,并与相关联的表分离,由于一般应用预先定义了触发器,相应的数据库管理系统对其进行了伪编译及优化,因而在客户/服务器计算模式下,对减轻网络流量及加快执行速度方面,是一较好的方案。



触发器仅可定义于表上,而不能定义于视图上,在大多数情况下,触发器用于如下几个方面:

1) 自动生成派生列值;2) 禁止非法事务;3) 增强复杂的安全识别;4) 在分布式数据库中增强参照完整性;5) 增强复杂的商业规则;6) 提供透明的事件日志;7) 提供高级审计;8) 维护同步表复制;9) 在表存取上聚合统计。

开发人员一般是对上述9种情况作组合使用,可归为以下四种典型应用。

1) 对库中相关表进行连环更新,如:键值的同步更新,数据冗余实现,计算表的同步更新等;

2) 实现那些破坏完整性操作的拒绝,如:不匹配外键值的插入拒绝;

3) 实现库定义本身所不能实现的更为复杂的商业规则,如:更新操作的时间限制,更新数据的幅度限制等;

4) 实现简单的“如果……怎么办”的分析。

在触发器的使用中,需注意避免级联点火的问题,另一方面,对触发器的过度使用会导致维护困难,还需注意触发器级定义完整性约束的区别。

2 触发器的组成

触发器,由触发事件或语句、触发器限制、触发体三部分组成,如下列所示:



能导致触发器点火的SQL语句叫做触发事件或语句,它可以是在一表上的INSERT,UPDATE或DELETE语句,也可以是多个DML语句,如:……INSERT OR DELETE OF INVENTORY……。

当多个类型DML语句点火触发器时,条件前置可用来检测触发语句的类型,因而,单一的触发器内可据点火触发器主句类型来执行不同的处理。

触发器限制指明一布尔型(逻辑)表达式,仅当表达式值为真(TRUE)时,触发器才点火,否则触发体将不被执行。

触发体是一个过程(PL/SQL块),它由一些SQL及PL/SQL语句代码组成,触发语句被执行,且触发器限制为真时,该段代码被执行。

与存贮过程类似,触发体内含SQL及PL/SQL语句,并可定义PL/SQL语言结构,可指明触发体、执行的次数。

行触发器对所影响的每行执行一次。如-UPDATE语句涉及到某表的多行更新,则对更新的每一行,触发器点火一次;而语句触发器仅点火一次,不管其语句影响到表的多少行;如-DELETE语句删除了表中的多行,但语句触发器仅点火一次。

在定义触发器时,还可指明触发时间,即触发体在触发语句之前或之后执行:BEFORE、AFTER。

在触发器的实际应用中,往往是组合触发时间及触发次数,由这些参数可形成如下表所示的四种类型的触发器。

类 型
含 义

触发时间
触发次数

BEFORE
Statement
在执行触发语句前,执行触发体

AFTER
Statement
在执行触发语句及申请任何滞后完全性约束之后,执行触发体

BEFORE
ROW
在修改所影响的每一行及验证相应完整性约束之前,执行触发体

AFTER
ROW
在修改所影响的每一行及可能申请相应完整性约束之后,执行触发体,设触发器实行行级封锁机制。


对一给定表,可以有同一类型的多个触发器。更进一步,对每种类型的DML语句(INSERT,UPDATE或DELETE)亦可建立任意多的前缀类型不同的触发器,针对同一语句的相同类型的触发器,其点火次序是随机的(不能实现程序控制)。

3 触发器的执行

定义于数据库的触发器,可由程序控制其使能(ENABLE)或屏蔽(DISABLE)状态。

单一的-SQL语句可以潜在地点火前述四种类型的触发器,另一方面,触发体内的一语句可能导致一个或多个完整性规则,也可能导致其它的触发器点火(级联触发器),关于多触发点火次序及约束检测,ORACLE采用以下的执行模型。

1) 执行所有的BEFORE语句级触发器;2) 对遍历所涉及的每一行:a.执行所有的BEFORE行级触发器;b.锁定并修改行,执行完整性约束检测;c.执行所有的AFTER行级触发器。3) 完成滞后完整性的约束检测;4) 执行所有的AFTER语句级触发器。

仅当整个执行模型成功之后,触发语句执行成功,否则在有例外代码指定的情况下,整个事务被退回。因而完整性约束定义不能与触发器定义相矛盾。
回复
fallstone 2002-03-07
老大,有没人要分了啊?
回复
mars884813 2002-03-05
建议你到数据库版去看一看!
回复
ivy_live521 2002-03-05
小小菜鸟,想学习!
关注!
回复
sorrow_arrow 2002-03-05
很好,继续
回复
daiwoo_wang 2002-03-05
触发器是编写的一段SQL语句,其关键字是TRIGGER,它附着于指定的表,作用主要在于监控其附着的表在产生特定动作时应做的SQL处理,关键字是TRIGGER,要建触发器必须如下写:CREATE TRIGGER triggername ON tablename,最典型的应用如进销寸,当输入领用单并提交数据库时,库存表应响应减少。所以可以在领用单记录表中加触发器,使当INSERT事件发生时,触发库存表对应字段的变化。使用触发器的好处在于大大简化了相关表的维护,将数据一致性问题交由数据库后台处理。你不必花精力考虑相关表的具体动作以及其执行的成败。
回复
sorrow_arrow 2002-03-05
我喜欢这个话题,继续
回复
zhanwei 2002-03-05
Trigger 是一种特殊的存储过程,他与表格紧密相连,可以看作是表的一个部分,他基于一个表创建,可以针对几个表进行操作,主要用来实现复杂的商业规则,主要功能1.级联修改(删除)
2.完整性检查,防止非法修改数据.
等等
回复
发动态
发帖子
PowerBuilder
创建于2007-09-28

809

社区成员

PowerBuilder 相关问题讨论
申请成为版主
社区公告
暂无公告