【PostgreSQL】pg触发器介绍

server/2024/10/19 12:43: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/server/35121.html

相关文章

图神经网络GNN的表达能力

回顾 图卷积神经网络GCN GNN概要 神经网络的表达能力 分类or回归 神经网络的表达能力举例: 深度学习的理论基础和上限 GNN的表达能力 定义:图神经网络的表达能力就是它区分不同图的区分能力 分析常见的GNN的表达能力并设计出表达能力最强的GN…

QT-day1

1、 自由发挥应用场景&#xff0c;实现登录界面。 要求&#xff1a;尽量每行代码都有注释。 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QIcon>//窗口 #include <QLabel>//标签库 #include <QMovie>//动态图片库 #include…

机器人操作系统ROS2学习 1

随着智能化时代的进程&#xff0c;机器人也在向着高度智能化的方向发展&#xff0c;这对应的机器人操作系统也就相应而生了。机器人操作系统ROS (Robot Operating System)的诞生为机器人系统的开发与应用带来了很大方便&#xff0c;也聚集了全球大量的应用开发人员推动ROS的发展…

与Apollo共创生态:让智驾技术为各行业发展赋能

目录 一、引言 二、Apollo七周年大会主要内容回顾 2.1活动回顾链接 2.2Apollo项目介绍 2.2.1Apollo项目发展介绍 2.2.2实验用车传感器介绍 2.2.3硬件连接概述 2.2.4软件概述 2.3Apollo X 企业自动驾驶解决方案介绍 2.3.1Apollo X 企业自动驾驶解决方案优势 2.3.2 Ap…

什么是水经微图加密锁?

水经微图&#xff0c;以下简称“微图”。 我们在《什么是水经微图注册码》一文中&#xff0c;为你分享了什么是微图注册码&#xff0c;以及其使用的方法。 现在&#xff0c;我们再为你分享什么是微图加密锁&#xff0c;以及其使用的方法。 水经微图&#xff08;以下简称“微…

安卓使用Fiddler抓包 2024

简介 最近试了一下安卓使用fiddler 抓包&#xff0c;发现https包基本都会丢失。原因是Anandroid 7版本针对ssl安全性做了加强&#xff0c;不认可用户的证书。我们要做的就是把fiddler导出的证书进过处理后放置到系统证书目录下面&#xff0c;这样才能抓包https请求。 这里使用…

C++之模板

1、概述 模板是一个非常强大的功能。C STL的各种组件也是基于模板实现的&#xff08;vector、map、string等&#xff09;。 模板主要分为&#xff1a;函数模型和类模板。 2、函数重载 示例&#xff1a;使用函数重载&#xff0c;对两个相同类型的数值进行和运算&#xff08;flo…

openGauss学习笔记-276 openGauss性能调优-实际调优案例05-改建分区表

文章目录 openGauss学习笔记-276 openGauss性能调优-实际调优案例05-改建分区表276.1 现象描述276.2 优化分析openGauss学习笔记-276 openGauss性能调优-实际调优案例05-改建分区表 276.1 现象描述 如下简单SQL语句查询, 性能瓶颈点在normal_date的Scan上。 QUERY PLAN ----…