【PostgreSQL】pg触发器介绍

devtools/2024/11/15 6:14:11/

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

触发器是在对指定表执行指定更改操作(SQL INSERT、UPDATE、DELETE 或 TRUNCATE 语句)时自动运行的一组操作。触发器对于强制执行业务规则、验证输入数据和保留审核跟踪等任务非常有用。

一、触发器介绍

1.1 触发器的用途:

  • 强制执行业务规则
  • 验证输入数据
  • 为不同文件中新插入的行生成唯一值。
  • 写入其他文件以进行审计跟踪
  • 从其他文件查询以进行交叉引用
  • 将数据复制到不同的文件,实现数据一致性

1.2 在业务中使用触发器的好处:

  • 加快应用程序开发速度。由于数据库存储触发器,因此不必将触发器操作编码到每个数据库应用程序中。
  •  业务规则的全局实施。定义触发器一次,然后将其重用于使用该数据库的任何应用程序。
  • 更易于维护。如果业务策略发生更改,则只需更改相应的触发程序,而不需要更改每个应用程序
  • 提高客户端/服务器环境中的性能。在结果返回之前,所有规则都在服务器上运行。
  • SQL 触发器的实现基于 SQL 标准。它支持大多数编程语言通用的构造。它支持局部变量的声明、控制过程流程的语句、将表达式结果分配给变量以及错误处理。

二、触发器语法

2.1 创建触发器

语法如下

说明

2.2 删除触发器

2.3  触发器函数中的特殊变量

三、示例

下面是触发函数的简单示例:

现在,我们可以创建触发器,该触发器将在执行时触发关联表的触发器中指定的事件。

在上面的触发器函数中,有一个新的关键字“NEW”,它是触发器的 PostgreSQL 扩展。有两个 PostgreSQL 扩展可以触发“OLD”和“NEW”。OLD 和 NEW 不区分大小写。

  • 在触发器正文中,使用 OLD 和 NEW 关键字可以访问受触发器影响的行中的列
  • 在 INSERT 触发器中,只能使用NEW.col_name。
  • 在 UPDATE 触发器中,可以使用 OLD.col_name 在更新行之前引用行的列,NEW.col_name在更新行后引用行的列。
  • 在 DELETE 触发器中,只能使用OLD.col_name;没有新行。

以 OLD 命名的列是只读的。您可以引用它(如果您具有 SELECT 权限),但不能修改它。如果您具有 SELECT 权限,则可以引用以 NEW 命名的列。在 BEFORE 触发器中,如果您具有 UPDATE 权限,则还可以使用 SET NEW.col_name = value 更改其值。这意味着您可以使用触发器来修改要插入到新行或用于更新行的值。


http://www.ppmy.cn/devtools/24425.html

相关文章

【Spring AI】09. ETL 管道

文章目录 ETL PipelineAPI 概述入门指南ETL 接口和实现DocumentReaderJsonReaderTextReaderPagePdfDocumentReaderParagraphPdfDocumentReaderTikaDocumentReader DocumentTransformerTextSplitterTokenTextSplitterContentFormatTransformerKeywordMetadataEnricherSummaryMet…

docker部署prometheus

概述 Prometheus是一个开源的服务监控系统和时序数据库,专为云计算环境设计。它提供了通用的数据模型和快捷的数据采集、存储和查询接口。Prometheus的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的目标中拉取数据。当新拉取到的…

企业营销战略新思考:营销5.0与开源AI智能名片S2B2C商城小程序引领私域流量经营新纪元

随着互联网的深入发展,企业营销战略已经不再是单一、静态的规划,而是一个持续进化、与市场紧密相连的动态过程。在这个过程中,营销5.0和开源AI智能名片S2B2C商城小程序的结合,为企业营销战略注入了新的活力,也为私域流…

进迭时空宣布开源RISC-V芯片的AI核心技术

仟江水商业电讯(4月29日 北京 委托发布)4月29日,在“创芯生生不息——进迭时空2024年度产品发布会”上,进迭时空CEO、创始人,陈志坚博士宣布将开源进迭时空在自研RISC-V AI CPU上的核心技术,包括AI扩展指令…

Python装饰器:深入解析与实战应用

Python装饰器:深入解析与实战应用 在Python编程中,装饰器(Decorators)是一个强大而灵活的工具,它允许程序员在不修改现有函数或类代码的情况下,为其添加新的功能。装饰器不仅简化了代码结构,还…

mac 上altool 找不到

如何使用 altool 命令行工具上传 IPA 包:_cmd 传ipa-CSDN博客 在终端中,使用以下命令找到Xcode 15中的"altool"路径: xcrun --find altool 运行后 xcrun --find altool /Applications/Xcode.app/Contents/Developer/usr/bin/altool…

stm32f103zet6_串口实现-DHT11-tim1(定时)

1思路 1打开时钟 1.1使用定时器实现us级的计时 1.2在打开串口 1,3在DHT11驱动中修改引脚 stm32cudeMX 配置 1打开时钟 2打开串口 3打开tim1(定时器) 4生成代码 代码设置 1导入DHT11库(tim.h是定时器的文件系统自动生成的) DHT11.c #include "dht11.h" #inc…

docker学习笔记8:centos docker安装redis

在 CentOS 上使用 Docker 安装 Redis 的步骤相对直接,下面是详细的操作指南: 1. 确保 Docker 已安装 首先,确保你的 CentOS 系统上已经安装并启动了 Docker。可以通过以下命令来检查 Docker 服务的状态: sudo systemctl status docker如果 Docker 未安装,你可以按照以下…