name
新しいトリガに付ける名前です。 これは、同じテーブルの他のトリガの名前とは異なるものでなければなりません。 名前はスキーマで修飾することはできません – トリガはそのテーブルのスキーマを継承します。 制約トリガでは、これは、SET CONSTRAINTSを使用してトリガの動作を変更するときに使用する名前でもあります。
BEFORE
AFTER
INSTEAD OF
イベントの前、後、または代わりに、関数が呼び出されるかを決定します。 制約トリガはAFTERとしてのみ指定できます。
event
INSERT、UPDATE、DELETE、TRUNCATEのどれか1つ、トリガを起動させるイベントを指定します。 複数のイベントはORを使用して指定できます。
UPDATEイベントの場合、この構文を使用して列のリストを指定することが可能です。
INSTEAD OF UPDATE イベントは列のリストをサポートしません。
table
トリガの対象となるテーブルまたはビューの名前 (スキーマで修飾されることもある)。 このオプションは外部キー制約のために使用され、一般的な使用は推奨されません。
DEFERRABLE
NOT DEFERRABLE
INITIALLY IMMEDIATE
INITIALLY DEFERRED
トリガのデフォルトのタイミングです。 これらの制約オプションの詳細については、CREATE TABLEのドキュメントを参照してください。
FOR EACH ROW
FOR EACH STATEMENT
これは、トリガ手続きがトリガイベントによって影響を受ける全ての行に対して1回、または、SQL文ごとに1回だけ起動されるべきかどうかを指定します。 どちらも指定されていない場合、FOR EACH STATEMENTがデフォルトとなります。 制約トリガはFOR EACH ROWのみ指定できます。
条件
トリガ関数が実際に実行されるかどうかを決定するブール式です。 WHENが指定されている場合、条件がtrueを返した場合のみ関数が呼び出されます。 FOR EACH ROWトリガでは、WHEN条件は、それぞれOLD.column_nameまたはNEW.column_nameと書くことによって、古い行や新しい行の値の列を参照することができます。 もちろん、INSERTトリガはOLDを参照できず、DELETEトリガはNEWを参照できません。
INSTEAD OFトリガはWHEN条件をサポートしません。
現在、WHEN式にサブクエリを含めることはできません。
制約トリガでは、WHEN条件の評価は延期ではなく、行更新操作実行のすぐ後に行われることに注意してください。
function_name
引数を取らず、trigger型を返すと宣言された、ユーザが提供する関数で、トリガが起動したときに実行されます。 引数はリテラル文字列定数です。 単純な名前や数値定数もここに書くことができますが、それらはすべて文字列に変換されます。 これらの引数が関数内でどのようにアクセスされるかについては、トリガー関数の実装言語の説明を確認してください。