首页 > 编程知识 正文

pg数据库引擎,pg数据库建库

时间:2023-05-06 15:54:31 阅读:268515 作者:628

1、什么是触发器

    触发器是一种由事件自动触发执行的特殊存储过程,这些事件可以是对一个表进行 INSERT、UPDATE、DELETE 等操作。

触发器经常用于加强数据的完整性约束和业务规则上的约束等。

2、创建触发器 步骤:

先为触发器建一个执行函数,此函数的返回类型为触发器类型 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选项说明触发器为行触发器。还有可以有语句触发器,二者区别是触发次数以行                                                 为单位还是语句为单位

3、示例

例如当删除学生表(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_triggerafter delete on studentfor each row execute procedure student_delete_trigger_fun(); 实现:隐形的帆布鞋删除这个学生的记录时,改学生关联在成绩表的数据也被删除。 4、语句级和行级触发器

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语句没有更新实际的行时,语句触发器也会被触发,而行级触发器不会被触发。

5、其他相关

禁用或启用触发器,可用以下命令:ALTER TRIGGER trigger_name DISABLE/ENABLE;

禁用某个表上的所有触发器,可用如下命令:ALTER TABLE table_name DISABLE ALL TRIGGERS.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。