赞
踩
触发器是一种由事件自动触发执行的特殊存储过程,这些事件可以是对一个表进行 INSERT、UPDATE、DELETE 等操作。
触发器经常用于加强数据的完整性约束和业务规则上的约束等。
先为触发器建一个执行函数,此函数的返回类型为触发器类型 trigger;
然后即可创建相应的触发器。
- CREATE [ CONSTRAINT ] TRIGGER name
- { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ]}
- ON table_name
- [ FROM referenced_table_name ]
- { NOT DEFERRABLE | [ DEFEREABLE ] { IINITIALLY IMMEDIATE | INITIALLY DEFERED} }
- FOR [ EACH ] { ROW | STATEMENT }
- [ WHEN { condition }]
- EXECUTE PROCEDURE function_name ( arguments )
CREATE --创建触发器 后面为自定义的触发器名称
BEFORE | AFTER --可以选 BEFORE 或 AFTER ,指触发器在附着表操作的之前还是之后触发
INSERT OR DELETE --触发事件,可以在 INSERT | DELETE | UPDATE(OF column ...) 中单选或多选,多选只能用OR连 接,不能用ADD
ON table_name --哪张表改变时会触发触发器
ON DESIGNATED_POINT --附着表,或视图,触发器只能附着在一张表/视图上
FOR EACH ROW --FOR EACH ROW选项说明触发器为行触发器。还有可以有语句触发器,二者区别是触发次数以行 为单位还是语句为单位
例如当删除学生表(student)中的一条记录时,把这个学生在成绩表 (score) 中的成绩记录也删除掉,这时就可以使用触发器。
先建触发器的执行函数:
- CREATE OR REPLEASE FUNCTION student_delete_trigger_fun()
- returns trigger as $$
- begin
- delete from score where student_no = old.student_no;
- return old;
- end;
- $$
- language plpgsql;
再创建这个触发器:
- CREATE TRIGGER delete_student_trigger
- after delete on student
- for each row execute procedure student_delete_trigger_fun();
PostgreSQL中的触发器可以分为:语句级触发器与行级触发器。
语句级触发器:
- CREATE TRIGGER log_trigger
- AFTER INSERT OR DELETE OR UPDATE ON student
- FOR STATEMENT EXECUTE PROCEDURE student_log_trigger();
语句级触发器执行每个SQL时,只执行一次 。
行级触发器:
- CREATE TRIGGER log_trigger
- AFTER INSERT OR DELETE OR UPDATE ON student
- FOR EACH ROW EXECUTE PROCEDURE student_log_trigger();
行级触发器每行都会执行一次。
而当SQL语句没有更新实际的行时,语句触发器也会被触发,而行级触发器不会被触发。
禁用或启用触发器,可用以下命令:ALTER TRIGGER trigger_name DISABLE/ENABLE;
禁用某个表上的所有触发器,可用如下命令:ALTER TABLE table_name DISABLE ALL TRIGGERS.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。