觸發器(tigger)是一種由事物自動觸發執行的特殊存儲過程,這些事件可以是對一個表進行INSERT、UPDATE、DELETE等操作。
一、創建觸發器
create [ constraint ] trigger name { before | after | instead of} { event [ or....] } on table_name [from referenced_table_name]
{not deferrable | [deferrable] {intially immediate | initially deferred }}
[for [each] {row | statement}]
[when (condition)]
execute procedure function_name (arguments)
1 實例:刪除學生表student的一條記錄是,同事刪掉score的成績記錄也刪除。
1.1 創建表
postgres=# create table student( student_no int primary key, sutdent_name varchar(40), age int); CREATE TABLE postgres=# create table score( postgres(# student_no int, postgres(# chinese_score int, postgres(# test_date date); CREATE TABLE postgres=#
1.2 創建執行函數
postgres=# create or replace function student_delete_trigger() postgres-# returns trigger as $$ postgres$# begin postgres$# delete from score where student_no = OLD.student_no; postgres$# return OLD; postgres$# end; postgres$# $$ postgres-# language plpgsql; CREATE FUNCTION
1.3 在創建觸發器
postgres=# create trigger delete_student_trigger postgres-# after delete on student postgres-# for each row execute procedure student_delete_trigger(); CREATE TRIGGER postgres=#
1.4 插入數據
postgres=# insert into score values(1,85,date '2018-05-16'); INSERT 0 1 postgres=# insert into score values(2,56,date '2018-05-16'); INSERT 0 1 postgres=# insert into score values(1,88,date '2018-05-16'); INSERT 0 1 postgres=# insert into score values(2,33,date '2018-05-16'); INSERT 0 1 postgres=# insert into score values(3,43,date '2018-05-16'); INSERT 0 1 postgres=# insert into score values(3,53,date '2018-05-16'); INSERT 0 1
1.5 刪除學號為3的學生
postgres=# delete from student where student_no = 3; DELETE 1 postgres=# select * from score; student_no | chinese_score | test_date ------------+---------------+------------ 1 | 85 | 2018-05-16 2 | 56 | 2018-05-16 1 | 88 | 2018-05-16 2 | 33 | 2018-05-16 (4 rows) postgres=#
未完待續。。。