【postgresql初级使用】初识触发器,在数据行发生变化时自动执行用户行为,也可以SQL级别触发,特别是视图上可以有触发器了

news2024/10/7 2:18:32

初识触发器

专栏内容

  • postgresql使用入门基础
  • 手写数据库toadb
  • 并发编程

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 初识触发器
  • 概述
  • 触发器的介绍
  • 触发器事件
    • 行级触发器
    • 语句级触发器
  • 触发器作用对象
    • 表对象触发器
    • 视图对象触发器
  • 触发器行为
  • 数据的可见性
  • 总结
  • 结尾

概述


在以前,每次入职新员工,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操作的beforeafter触发器,并且可以是针对每一行或每个SQL语句触发一次。

对于UPDATE触发器,还可以设置为仅当UPDATE语句的SET子句中提到某些列时才触发。

特别的,命令truncate将表文件截断,将表清空,只能定义为语句级触发器,因为它的执行发生在文件上,与数据行无关。

视图对象触发器

可以附加到视图上。这些触发器通常是INSTEAD OF触发器,意味着它们会替代对视图执行的INSERTUPDATEDELETE操作。

对于每个需要修改的视图行,都会触发一次INSTEAD OF触发器,也就是它只能是行级触发器。

触发器的函数负责在视图的基表上进行必要的修改,并(在适当时)返回修改后的行, 以视图中的形式表示。

此外,视图上也可以定义在每个SQL语句的beforeafter触发器,但这些仅在视图上的INSTEAD OF触发器时才会触发。

触发器行为


当触发器事件发生时(即满足触发条件的操作被执行时),触发器的函数会在适当的时间被调用以处理该事件。

这可能涉及修改数据、执行其他SQL语句、调用其他函数或存储过程等。

在postgresql 中,触发器的行为是一个用户自定义的函数,在事件触发时会自动调用此函数,执行对应函数中定义的行为。

数据的可见性


  1. 对于语句级触发器
  • BEFORE 语句级触发器不会看到由该语句所做的任何更改。
  • AFTER 语句级触发器会看到该语句所做的所有更改。
  1. 行级BEFORE触发器
  • 触发器函数中的SQL命令不会看到由该触发器即将进行的更改(例如,即将插入、更新或删除的行),因为这些更改尚未发生。
  • 它们会看到在本事务的前面命令处理的行所做的数据更改的效果。由于这些更改事件的顺序通常不可预测(一个影响多行的SQL命令可以以任何顺序访问这些行),因此需要谨慎处理。
  1. 行级AFTER触发器
  • 当行级AFTER触发器被触发时,本事务当前命令及之前命令,所有数据更改都已经完成,并且对这些更改的可见性适用于触发器函数。
  1. INSTEAD OF事件触发器
  • 在本事务中,INSTEAD OF触发器将看到由先前触发的INSTEAD OF触发器所做的数据更改的效果。
  1. 函数稳定性(Function stability)
  • 如果触发器函数是用标准过程语言编写的,并且被声明为VOLATILE,那么上述规则适用。
  • 如果函数被声明为STABLEIMMUTABLE,则它不会看到调用命令所做的任何更改。

总结


触发器在数据库中有很多用途,例如数据完整性检查、数据审计、自动更新相关表中的数据、防止无效数据进入数据库等。

它们提供了一种在数据库操作中自动执行特定任务的机制,从而减少了应用程序代码中的冗余和复杂性。

结尾


非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入解析手机信息恢复,2个技巧,做数据安全守护者

在现代社会,手机就像我们的第六感一样,随时能够帮助我们搞定难题。但是,有时候手机也会闹个小脾气,比如误删信息、系统崩溃和硬件故障等,这些问题可了不得!它们会让我们无法访问那些重要的数据,…

【机器学习】逻辑回归:原理、应用与实践

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 逻辑回归:原理、应用与实践引言1. 逻辑回归基础1.1 基本概念1.2 Sig…

Mysql8安装教程与配置(超详细图文)

MySQL 8.0 是 MySQL 数据库的一个重大更新版本,它引入了许多新特性和改进,旨在提高性能、安全性和易用性。 1.下载MySQL 安装包 注:本文使用的是压缩版进行安装。 (1)从网盘下载安装文件 点击此处直接下载 &#…

网络层-IP协议 二

一、网段划分 为了进行组网,把一个IP地址,分成了两个部分: 网络号 主机号 例如:192.168.2.100 这个IP地址中,前面一部分 : 192.168.2就是我们的网络号 后面一部分 100就是我们的主机号. 家用宽带来说,一般默认就是前面三个字节是网络号,主机号的范围就表示局域网中可以有…

开机弹窗找不到opencl.dll怎么办,教你几种有效的修复方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到opencl.dll文件”。这个问题可能会影响到我们的正常使用,因此了解其原因和解决方法是非常必要的。本文将从多个方面对“找不到opencl.dll文件”这一问题进行详细分析和解…

某h5st逆向分析

具体网址经过了base64处理 aHR0cHM6Ly9zby5tLmpkLmNvbS93YXJlL3NlYXJjaC5hY3Rpb24/a2V5d29yZD0lRTklOTklQTQlRTYlQjklQkYlRTYlOUMlQkEmc2VhcmNoRnJvbT1ob21lJnNmPTE1JmFzPTA 要做的是一个搜索的功能具体如图所示。 这里发现携带的参数中存在一个token还有一个加密参数&#x…

【网络安全的神秘世界】Kali火狐浏览器汉化教程

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 打开火狐浏览器 进入设置后,搜索language 打开之后选择添加其他语言,简体中文在最后一个 Add后点击ok即可

代码签名证书:软件安全的守护神

在数字化日益普及的今天,软件安全问题愈发受到人们的关注。而在这其中,一个常被提及但可能不为大众所熟知的名词——“代码签名证书”,实际上在软件安全领域扮演着举足轻重的角色。今天,我们就来聊聊代码签名证书对软件安全到底有…

SVM模型实现城镇居民月平均消费数据分类

SVM模型实现城镇居民月平均消费数据分类 一、SVM支持向量机简介二、数据集介绍三、SVM建模流程及分析一、SVM支持向量机简介 支持向量机是由感知机发展而来的机器学习算法,属于监督学习算法。支持向量机具有完备的理论基础,算法通过对样本进行求解,得到最大边距的超平面,并…

485数据采集模块

在工业自动化与智能化的浪潮中,数据采集作为整个系统的基础和核心,其准确性和实时性直接关系到生产效率和产品质量。而485数据采集模块,作为连接现场设备与上位机的重要桥梁,其性能与稳定性对于整个系统的运行至关重要。HiWoo Box…

浪潮电脑文件消失怎么恢复?原来有这五种方法

无论是工作、学习还是娱乐,电脑都扮演着举足轻重的角色。然而,在使用电脑的过程中,我们有时会遇到一些令人头疼的问题,比如文件突然消失。对于使用浪潮电脑的用户来说,文件消失可能是一个令人焦虑的问题。本文将为您详…

如何通俗易懂地理解大模型参数?

大型语言模型 (LLM) 的大小是通过参数数量来衡量的。举几个典型例子,GPT-3 有 1750 亿个参数,1750亿也可称为175B(1B 10亿),Meta最新开源的Llama3 参数数量在 80 亿到 700 亿之间,智谱公司最新开源的GLM4-…

【再探】Java—Java 沙箱机制与类加载器

沙箱(Sandbox)机制是将Java程序限定在JVM特定的运行范围内,并严格限制代码对本地系统资源的访问,以保证代码的有效隔离,防止对本地系统造成破坏。 1 安全模型 类在加载过程中,类加载器会为类设置初始的安…

【Java毕业设计】基于JavaWeb的在线购物网站的设计与实现

文章目录 摘 要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 vue技术1.4.2 B/S结构1.4.3 Spring Boot框架1.4.4 MySQL数据库1.4.5 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能结构设计3.2 系统…

美国签证办理需要带哪些材料?

在申请美国签证时,准备充分的材料至关重要。以下知识人网整理的关于您可能需要携带的一些常见材料: 1.护照:您的护照必须是有效的,并且在签证申请过程中至少有六个月的有效期。 2.签证申请表:您需要填写并提交签证申请…

联合(union)和枚举(enum)学习(c语言)

前言 Hello,亲爱的小伙伴们,好久不见,今天我们继续来学习新的内容-----联合和枚举 如果喜欢作者菌的文章的话,就不要吝啬手中的三连呀,万分感谢!! 联合(共用体)(union&…

前端开发之性能优化

本文章 对各大学习技术论坛知识点,进行总结、归纳自用学习,共勉🙏 文章目录 1. [CDN](https://www.bootcdn.cn/)2.懒加载3.缓存4.图片压缩5.图片分割6.sprite7.Code Splitting8.gzip9.GPU加速10.Ajax11.Tree Shaking12.Resource Hints 1. CD…

VisualStudio 2022 安装net8sdk后无法创建net8项目

目录 一级目录原因分析解决办法 一级目录 VisualStudio 2022 安装net8sdk后无法创建net8项目 原因分析 解决办法 安装net8 查看安装的版本 dotnet --list-sdks升级VisualStudio 2022版本,重启电脑 当前版本 开始升级 升级后版本 已可以使用net8.0

盲盒一番赏小程序:开发探索之旅,打造独特互动体验

在快节奏的现代生活中,每个人都期待一份突如其来的惊喜。为了满足这一需求,我们倾力打造了“盲盒一番赏”小程序,为你带来全新的购物体验,让每一次点击都成为一次心跳加速的探险之旅。 一、盲盒文化,点燃惊喜火花 盲…

苹果不会在WWDC 2024中推出任何搭载M4芯片的Mac电脑

虽然苹果公司已在上月推出了首搭 M4 芯片的 iPad Pro,不过彭博社的马克・古尔曼在最近的实时通讯中透露苹果公司不会在即将进行的 WWDC 2024 开发者大会中推出任何搭载 M4 芯片的 Mac 电脑(不会推出任何硬件产品)。 此前报道,苹果…