文章目錄
- openGauss學習筆記-42 openGauss 高級數據管理-觸發器
- 42.1 語法格式
- 42.2 參數說明
- 42.3 示例
openGauss學習筆記-42 openGauss 高級數據管理-觸發器
觸發器會在指定的數據庫事件發生時自動執行函數。
42.1 語法格式
-
創建觸發器
CREATE TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }ON table_name[ FOR [ EACH ] { ROW | STATEMENT } ][ WHEN ( condition ) ]EXECUTE PROCEDURE function_name ( arguments );
-
修改觸發器
ALTER TRIGGER trigger_name ON table_name RENAME TO new_trigger_name;
-
刪除觸發器
DROP TRIGGER trigger_name ON table_name [ CASCADE | RESTRICT ];
42.2 參數說明
-
trigger_name
觸發器名稱。
-
BEFORE
觸發器函數是在觸發事件發生前執行。
-
AFTER
觸發器函數是在觸發事件發生后執行。
-
INSTEAD OF
觸發器函數直接替代觸發事件。
-
event
啟動觸發器的事件,取值范圍包括:INSERT、UPDATE、DELETE或TRUNCATE,也可以通過OR同時指定多個觸發事件。
-
table_name
觸發器對應的表名稱。
-
FOR EACH ROW | FOR EACH STATEMENT
觸發器的觸發頻率。
- FOR EACH ROW是指該觸發器是受觸發事件影響的每一行觸發一次。
- FOR EACH STATEMENT是指該觸發器是每個SQL語句只觸發一次。
未指定時默認值為FOR EACH STATEMENT。約束觸發器只能指定為FOR EACH ROW。
-
function_name
用戶定義的函數,必須聲明為不帶參數并返回類型為觸發器,在觸發器觸發時執行。
-
arguments
執行觸發器時要提供給函數的可選的以逗號分隔的參數列表。
-
new_trigger_name
修改后的新觸發器名稱。
42.3 示例
--創建源表及觸發表
openGauss=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT);
openGauss=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);--創建觸發器函數
openGauss=# CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS$$DECLAREBEGININSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3);RETURN NEW;END$$ LANGUAGE PLPGSQL;openGauss=# CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS$$DECLAREBEGINUPDATE test_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1;RETURN OLD;END$$ LANGUAGE PLPGSQL;openGauss=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS$$DECLAREBEGINDELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1;RETURN OLD;END$$ LANGUAGE PLPGSQL;--創建INSERT觸發器
openGauss=# CREATE TRIGGER insert_triggerBEFORE INSERT ON test_trigger_src_tblFOR EACH ROWEXECUTE PROCEDURE tri_insert_func();--創建UPDATE觸發器
openGauss=# CREATE TRIGGER update_triggerAFTER UPDATE ON test_trigger_src_tbl FOR EACH ROWEXECUTE PROCEDURE tri_update_func();--創建DELETE觸發器
openGauss=# CREATE TRIGGER delete_triggerBEFORE DELETE ON test_trigger_src_tblFOR EACH ROWEXECUTE PROCEDURE tri_delete_func();--執行INSERT觸發事件并檢查觸發結果
openGauss=# INSERT INTO test_trigger_src_tbl VALUES(100,200,300);
openGauss=# SELECT * FROM test_trigger_src_tbl;
openGauss=# SELECT * FROM test_trigger_des_tbl; //查看觸發操作是否生效。--執行UPDATE觸發事件并檢查觸發結果
openGauss=# UPDATE test_trigger_src_tbl SET id3=400 WHERE id1=100;
openGauss=# SELECT * FROM test_trigger_src_tbl;
openGauss=# SELECT * FROM test_trigger_des_tbl; //查看觸發操作是否生效--執行DELETE觸發事件并檢查觸發結果
openGauss=# DELETE FROM test_trigger_src_tbl WHERE id1=100;
openGauss=# SELECT * FROM test_trigger_src_tbl;
openGauss=# SELECT * FROM test_trigger_des_tbl; //查看觸發操作是否生效--修改觸發器
openGauss=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed;--刪除觸發器
openGauss=# DROP TRIGGER insert_trigger ON test_trigger_src_tbl;
openGauss=# DROP TRIGGER update_trigger ON test_trigger_src_tbl;
openGauss=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl;
👍 點贊,你的認可是我創作的動力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進步的財富!