Provided by: manpages-zh_1.5-1_all bug

NAME

       CREATE TRIGGER - 定義一虓s的觸發器

SYNOPSIS

       CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
           ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
           EXECUTE PROCEDURE funcname ( arguments )

DESCRIPTIONyz
       CREATE                    TRIGGER                   創建一虓s的觸發器。
       觸發器將與指定表關聯並且將在特定事件發生時執行聲明的函數 func。

        觸發器可以聲明為在對記錄進行操作之前(在檢查約束之前和  INSERT,UPDATE
       或 DELETE 執行前)或操作完成之後(在檢查約束之後和完成  INSERT, UPDATE
       或                         DELETE                          操作)觸發。
       如果觸發器在事件之前,觸發器可能略過當前記錄的操作或改變被插入的(當前)記錄(只對
       INSERT               和               UPDATE               操作有效)。
       如果觸發器在事件之後,所有更改,包括最後的插入,
       更新或刪除對觸發器都是"可見"的。

        一       FOR       EACH        ROW        執行指定操作的觸發器為操作-
       蚹麊漕C一行都調用一次。比如,一蚍v響     10     行的    DELETE    將導-
       P任何在目標關系上的   ON   DELETE   觸發器獨立調用    10    次,    每-
       茬Q刪除的行一次。相比之下,一茯鬥定操作     FOR     EACH     STATEMENT
       的觸發器只是為任何操作執行一次,不管有多少行被蚹鵅C      (特別是,一-
       蚹儮s行的操作仍然會導P任何合適的 FOR EACH STATEMENT 觸發器的執行。)

        如果多茼P類型的觸發器為同樣事件做了定義,                      那麼它-
       戔N按照字母順序被激活。

       SELECT              並不更改任何行,因此你不能創建               SELECT
       觸發器。這種場合下規則和視圖更合適些。

        請參考 Part V ``Triggers'' 獲取更多信息。

PARAMETERS數
       name    賦予新觸發器的名稱。它必需和任何作用於同一表的觸發器不同。

       BEFORE

       AFTER   決定該函數是在事件之前還是之後調用。

       event  INSERT,DELETE  或 UPDATE 其中之一。 它聲明擊發觸發器的事件。多-
              茖韞i以用 OR 聲明。

       table  觸發器作用的表名稱(可以用模式袡╮^。

       FOR EACH ROW

       FOR EACH STATEMENT
               這些選項聲明觸發器過程是否為觸發器事件影響的每茼磑眶o一次,
              還是只為每條   SQL   語句觸發一次。如果都沒有聲明,   FOR   EACH
              STATEMENT 是預設。

       func   一茖洏峈抴ㄗ悛漕蝻A它聲明為不接受參數並且返回 trigger 類型。

       arguments
               一茈i選的用逗號分隔的參數列表,它將在觸發器執行的時-
              埭ㄗ捄麂蝻A
              這些參數是文本字串常量。也可以在這裏寫簡單的名字和數-
              `量,但是它抪|被轉換成字串。
              請檢查實現語言中關於如何在觸發器函數中訪問觸發器參數的描z;
              這些參數可能和普通的函數參數不同。

NOTES`N
        n在一茠矰W創建一蚅眶o器,使用者必需在該表上有 TRIGGER 權。

        在  PostgreSQL  版本  7.3 以前, 我怚眸概熗眶o器函數聲明為返回佔位類型
       opaque,  而不是  trigger。為了支持裝載老的轉儲檔案,  CREATE   TRIGGER
       將接受一蚆n明為返回    opaque    的函數,    但是它將發出一條    NOTICE
       並且把函數聲明的返回類型改成 trigger。

        用 DROP TRIGGER [drop_trigger(7)] 獲取如何刪除觸發器的信息。

EXAMPLESl
       Section 33.4 ``Triggers'' 包含一荍嗾膋漕狺l。

COMPATIBILITYe性
       CREATE TRIGGER 裏的 CREATE  TRIGGER  語句實現了一  SQL99  標準的子集。
       (SQL92 裏沒有觸發器) 目前仍然缺少下悸漸\能︰

       o SQL99 允許觸發器為指定的字段的更新進行觸發(也就是說,AFTER UPDATE OF
         col1, col2)。

       o SQL99           允許你為           "old"           和           "new"
         行或者表定義別名,用於定義觸發器的動作(也就是說, CREATE TRIGGER ...
         ON tablename REFERENCING OLD ROW AS somename  NEW  ROW  AS  othername
         ...)。因為                                                 PostgreSQL
         允許觸發器過程以任意數量的使用者定義語言進行書寫,所以訪問數據的工作是用和語言相關的方法實現的。

       o PostgreSQL 只允許為觸發的動作執行存儲的過程。SQL99 允許執行一些其他的
         SQL 命令, 比如那 CREATE TABLE 作為觸發器動作。  這茪謒瓣讕順},只-
         n創建一荌鶡瘜o些命令的存儲過程即可。

       SQL99         n求多蚅眶o器應該以創建的時間順序執行。         PostgreSQL
       採用的是按照名字順序, 我抳{為這樣更加方便。

        用 OR 給一蚅眶o器聲明多荌囮@是 PostgreSQL  對標準的擴展。

SEE ALSO見
       CREATE FUNCTION [create_function(7)], ALTER TRIGGER [alter_trigger(l)],
       DROP TRIGGER [drop_trigger(l)]

者
       Postgresql  <laser@pgsqldb.org>