ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【postgresql初级使用】初识触发器,在数据行发生变革时主动实行用户举动, [打印本页]

作者: 忿忿的泥巴坨    时间: 2024-6-15 03:01
标题: 【postgresql初级使用】初识触发器,在数据行发生变革时主动实行用户举动,
初识触发器

   ​专栏内容
  
    个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以发奋图强;地势坤,君子以厚德载物.
  
  
概述


在以前,每次入职新员工,HR就特殊忙,要验收入职资料,还要找各负责人开通帐号,还要发好些关照,同时还要在各种范例的表格中填加一行新的内容,丝绝不敢马虎大意。
现在使用了数据库体系之后,这些事情就变得简单多了,只需要验收资料,录入新员工信息,其它就会主动触发,这就用到了触发器这一功能。
和其它商业数据库一样,在postgresql 中也支持触发器这一功能,那么什么是触发器呢,又有什么作用呢?
本节内容就是带各人认识一下触发器,以及触发器的作用。
触发器的先容


触发器 (trigger) 顾名思义就是主动会触发的一种举动,类似于地雷,碰到了就会炸。
在postgresql 中,触发器以下内容组成:

下面就这两部门展开来聊一聊。
触发器事件


根据触发器事件范例的差别,分为两大范例,一种是行级事件;另一种是语句级的触发器。
下面来看它们有什么差别。
行级触发器

行级触发器(row-level triggers 或 per-row triggers), 对于每个数据行来说,它的变革举动有insert新增一行数据,update修改行数据的值,delete减少一行数据。
针对行数据的变革事件,都可以使触发器工作,每条变动的数据行都会触发,如果一条SQL语句删除了100行,那么就会触发100次。
固然触发器更加精准,还区分了事件发生前 Before,与事件发生后 after触发。

从图中可以看到,触发器是在实行修改的节点前后举行触发,每一行数据都会经过扫描节点,modify节点。
语句级触发器

语句级触发器(statement-level triggers 或 per-statement triggers), 是基于SQL语句事件来触发,也就是说无论每条SQL语句影响的数据行有多少,只触发一次。
固然语句级触发器也分事件发生前 Before,与事件发生后 after触发。

从图中可以看到,触发器是在整个SQL筹划实行的节点前后举行触发,只经过一次,所以也就会只触发一次。
触发器作用对象


上面先容了触发器的分类,那么触发器可以界说于那些数据库对象上面呢?
触发器可以作用于数据表(table),视图(view)以及外部表(foreign table), 这里特殊提一下,postgresql 的触发器可以作用于视图上,这是非常实用的一点。
表对象触发器

可以附加到表(无论是否分区)和外部表上。
它们可以在INSERT、UPDATE、DELETE操纵的before或after触发器,而且可以是针对每一行或每个SQL语句触发一次。
对于UPDATE触发器,还可以设置为仅当UPDATE语句的SET子句中提到某些列时才触发。
特殊的,下令truncate将表文件截断,将表清空,只能界说为语句级触发器,因为它的实行发生在文件上,与数据行无关。
视图对象触发器

可以附加到视图上。这些触发器通常是INSTEAD OF触发器,意味着它们会替换对视图实行的INSERT、UPDATE或DELETE操纵。
对于每个需要修改的视图行,都会触发一次INSTEAD OF触发器,也就是它只能是行级触发器。
触发器的函数负责在视图的基表上举行须要的修改,并(在得当时)返回修改后的行, 以视图中的情势表示。
此外,视图上也可以界说在每个SQL语句的before或after触发器,但这些仅在视图上的INSTEAD OF触发器时才会触发。
触发器举动


当触发器事件发生时(即满意触发条件的操纵被实行时),触发器的函数会在得当的时间被调用以处理该事件。
这可能涉及修改数据、实行其他SQL语句、调用其他函数或存储过程等。
在postgresql 中,触发器的举动是一个用户自界说的函数,在事件触发时会主动调用此函数,实行对应函数中界说的举动。
数据的可见性







总结


触发器在数据库中有很多用途,比方数据完备性检查、数据审计、主动更新相关表中的数据、防止无效数据进入数据库等。
它们提供了一种在数据库操纵中主动实行特定任务的机制,从而减少了应用程序代码中的冗余和复杂性。
结尾


   非常感谢各人的支持,在欣赏的同时别忘了留下您名贵的评论,如果以为值得鼓励,请点赞,收藏,我会更加努力!
  作者邮箱:study@senllang.onaliyun.com
如有错误大概疏漏欢迎指出,互相学习。
注:未经同意,不得转载!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4