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 |