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 |