CREATE TRIGGER(7) | SQL Commands | CREATE TRIGGER(7) |
CREATE TRIGGER - 定义一个新的触发器
CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE funcname ( arguments )
CREATE TRIGGER 创建一个新的触发器。 触发器将与指定表关联并且将在特定事件发生时执行声明的函数 func。
触发器可以声明为在对记录进行操作之前(在检查约束之前和
INSERT,UPDATE 或 DELETE
执行前)或操作完成之后(在检查约束之后和完成
INSERT, UPDATE 或 DELETE
操作)触发。
如果触发器在事件之前,触发器可能略过当前记录的操作或改变被插入的(当前)记录(只对
INSERT 和 UPDATE 操作有效)。
如果触发器在事件之后,所有更改,包括最后的插入,
更新或删除对触发器都是"可见"的。
一个 FOR EACH ROW
执行指定操作的触发器为操作修改的每一行都调用一次。比如,一个影响
10 行的 DELETE
将导致任何在目标关系上的
ON DELETE 触发器独立调用 10
次,
每个被删除的行一次。相比之下,一个为指定操作
FOR EACH STATEMENT
的触发器只是为任何操作执行一次,不管有多少行被修改。
(特别是,一个修改零行的操作仍然会导致任何合适的
FOR EACH STATEMENT
触发器的执行。)
如果多个同类型的触发器为同样事件做了定义,
那么它们将按照字母顺序被激活。
SELECT 并不更改任何行,因此你不能创建 SELECT 触发器。这种场合下规则和视图更合适些。
请参考 Part V ``Triggers''
获取更多信息。
要在一个表上创建一个触发器,用户必需在该表上有 TRIGGER 权限。
在 PostgreSQL 版本 7.3 以前,
我们必须把触发器函数声明为返回占位类型
opaque, 而不是
trigger。为了支持装载老的转储文件,
CREATE TRIGGER
将接受一个声明为返回
opaque 的函数,
但是它将发出一条 NOTICE
并且把函数声明的返回类型改成
trigger。
用 DROP TRIGGER [drop_trigger(7)]
获取如何删除触发器的信息。
Section 33.4 ``Triggers'' 包含一个完整的例子。
CREATE TRIGGER 里的 CREATE TRIGGER 语句实现了一个 SQL99 标准的子集。 (SQL92 里没有触发器) 目前仍然缺少下面的功能∶
SQL99 要求多个触发器应该以创建的时间顺序执行。 PostgreSQL 采用的是按照名字顺序, 我们认为这样更加方便。
用 OR
给一个触发器声明多个动作是
PostgreSQL 对标准的扩展。
CREATE FUNCTION [create_function(7)], ALTER TRIGGER [alter_trigger(l)], DROP TRIGGER [drop_trigger(l)]
Postgresql 中文网站 何伟平 <laser@pgsqldb.org>
本页面中文版由中文
man 手册页计划提供。
中文 man
手册页计划:https://github.com/man-pages-zh/manpages-zh
2003-11-02 | SQL - Language Statements |