【转】PostgreSQL触发器(二)语句级触发器与行级触发器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【转】PostgreSQL触发器(二)语句级触发器与行级触发器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2026字,纯文字阅读大概需要3分钟。
内容图文
原文:?https://blog.csdn.net/liyazhen2011/article/details/82802342
------------------------------------------
PostgreSQL中的触发器可以分为:语句级触发器与行级触发器。
先说结论:语句级触发器执行每个SQL时,只执行一次 ;行级触发器每行都会执行一次。
下文会通过实例分别介绍这两种触发器。创建一张学生表和日志表,在日志表中记录对学生表的操作(插入、删除、更新)。
1.建表
CREATE TABLE student (
id int primary key,
name varchar(40)
);
CREATE TABLE student_log (
op_time timestamp,
db_user varchar(40),
op_type varchar(20)
);
2.创建执行函数
CREATE OR REPLACE FUNCTION student_log_trigger()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO student_log VALUES(now(), user, TG_OP);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
3.语句级触发器
CREATE TRIGGER log_trigger
AFTER INSERT OR DELETE OR UPDATE ON student
FOR STATEMENT EXECUTE PROCEDURE student_log_trigger();
现在向学生表中插入数据。
INSERT INTO student VALUES(1,'April'),(2,'Harris');
查看日志表中的信息。
select * from student_log;
执行结果:
我们发现,在语句级触发器下,虽然学生表中插入了两条数据,但是日志表中只有一条记录。
结论:语句级触发器执行每个SQL时,只执行一次 。
4.行级触发器。
CREATE TRIGGER log_trigger
AFTER INSERT OR DELETE OR UPDATE ON student
FOR EACH ROW EXECUTE PROCEDURE student_log_trigger();
将学生表上的语句级触发器删除,并且清空学生表。然后创建一个行级触发器,同样执行上述数据插入操作,查看日志表中的信息。
执行结果:
我们发现,在行级触发器下,学生表中插入了两条数据,日志表中有两条记录。
结论:行级触发器每行都会执行一次。
5.总结
语句级触发器执行每个SQL时,只执行一次 。它是按照语句进行触发的,而不管这条语句实际操作了多少行数据。
行级触发器每行都会执行一次。它是按照语句实际操作了多少行数据决定触发的次数。
当SQL语句没有更新实际的行时,语句触发器也会被触发,而行级触发器不会被触发。
————————————————
版权声明:本文为CSDN博主「万里归来少年心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liyazhen2011/article/details/82802342
内容总结
以上是互联网集市为您收集整理的【转】PostgreSQL触发器(二)语句级触发器与行级触发器全部内容,希望文章能够帮你解决【转】PostgreSQL触发器(二)语句级触发器与行级触发器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。