PostgreSQL11 | 触发器
本文章代码已在pgsql11.22版本上运行且通过,展示页由pgAdmin8.4版本提供
上一篇总结了原著的第十章有关pgsql的视图的用法,本篇将总结pgsql的触发器的用法。
触发器
使用触发器可以自动化完成一些在插入数据或修改数据时,某些需要同期同步的数据的工作。例如,期望在进行增加新一行数据时,把插入时的“插入时间”进行同步的功能,在我进行sql代码编写时,因为已经提早就做好了触发器,我只需要填充其他所需的数据,不用再去写“插入时间”这一列的数据。
触发器可以定义在一个INSERT、UPDATE或DALETE命令之前或之后执行
所谓触发器函数,就是一个无参并返回一个trigger类型的函数,用于触发器来执行任务的函数,所以在创建触发器前,要先创建一个触发器函数。
书写格式
触发器函数创建格式:
CREATE FUNCTION 函数名() RETURNS trigger as $函数名$BEGIN 函数执行代码;end;
$函数名$ LANGUAGE plpgsql;
然后再创建触发器,用于pgsql在用户执行某一个指定的操作时,自动激活触发器完成任务
触发器创建格式:
CREATE trigger 触发器名 BEFORE|AFTER 触发事件【INSERT|UPDATE|DELETE】 ON 表名
FOR EACH ROW EXECUTE PROCEDURE 触发器函数名();
BEFORE:在触发事件之前先完成函数动作,然后再执行触发事件本身
AFTER:在触发事件之后再完成函数动作
使用案例
我们需要创建一个表timedb,有三个属性:uid、gid和uptime,其中uptime需要使用触发器timedb_updateTime在新增每条新记录时执行函数func_timedb自动获取当前时间并存储
1.先创建这张基础表timedb
CREATE TABLE timedb (uid INTEGER,gid INTEGER,uptime timestamp with time zone);
2.创建触发器函数
CREATE FUNCTION func_timedb() RETURNS trigger as $func_timedb$BEGIN if(TG_OP='UPTIME')thenif NEW.uptime=OLD.uptime thenreturn null;end if;end if;update timedb set uptime = NOW() where uid = NEW.uid and gid=New.gid;return null;end;
$func_timedb$ LANGUAGE plpgsql;
这里说明一下代码中的NEW和OLD,这两个关键字在触发器中有不同的用法
NEW:用于引用触发器操作后(例如,INSERT 或 UPDATE 操作后)的新行数据,
- 在 INSERT 触发器中,
NEW
表示将要插入的新行。 - 在 UPDATE 触发器中,
NEW
表示更新后的行数据。
OLD: 用于引用触发器操作前(例如,UPDATE 或 DELETE 操作前)的旧行数据,
- 在 UPDATE 触发器中,
OLD
表示更新前的行数据。 - 在 DELETE 触发器中,
OLD
表示将要被删除的行数据。
注意在update更新操作时是调用了内置函数NOW()来赋值给uptime,注意不要打错字,不然该问题会在后续插入数据的时候才会出现错误。
3.创建触发器
CREATE trigger timedb_updateTime AFTER INSERT ON timedb
FOR EACH ROW EXECUTE PROCEDURE func_timedb();
4.基础表和触发器都完成后就可以尝试插入数据了,我们只插入前两列的数据uid和gid
INSERT INTO timedb VALUES(1,3);
5.最后查看一下我们插入的数据
没问题,uptime有正确的自动填入了
使用触发器可以大大减少sql代码的书写工作,提高效率,除此之外还可以用于表更新时的某些数据进行自动化修改,不过触发器的应用频率并不是特别高,该部分内容可以仅了解。
作者的话(Alvin):
本文根据原书《PostgreSql11 从入门到精通》(清华大学出版社)第11章总结整理,为提问与解答可以帮助更多人,本博客模拟GitHub的issue方案,所以私信已关,有问题请在评论区直接指正与提问,允许转发、复制或引用本文章,必须遵守开源法则注释来源与作者,感谢您的阅读
相关文章:
PostgreSQL11 | 触发器
本文章代码已在pgsql11.22版本上运行且通过,展示页由pgAdmin8.4版本提供 上一篇总结了原著的第十章有关pgsql的视图的用法,本篇将总结pgsql的触发器的用法。 触发器 使用触发器可以自动化完成一些在插入数据或修改数据时,某些需要同期同步的…...
cesium canvas广告牌
在有些业务中,对场景中的广告牌样式要求比较高,需要动态显示一些数据,这个时候,我们可以通过将复杂背景样式制作成图片,通过canvas绘制图片和动态数据,从而达到比较好的显示效果。 1 CanvasMarker 类封装 …...
使用Floyd算法求解两点间最短距离
Floyd算法 Floyd算法又称为Floyd-Warshell算法,其实Warshell算法是离散数学中求传递闭包的算法,两者的思想是一致的。Floyd算法是求解多源最短路时通常选用的算法,经过一次算法即可求出任意两点之间的最短距离,并且可以处理有负权…...
linux“how_paras.sh“ E212: 无法打开并写入文件
经过一番测试和查找, [6localhost bin]$ find / -name "hello.sh" 2>/dev/null /home/6/bin/hello.sh [6localhost bin]$ ls hello.sh ls: 无法访问hello.sh: 没有那个文件或目录,为什么在/bin文件下却不能打开, [6localhost …...
CSS mask-image 实现边缘淡出过渡效果
使用场景 在生产环境中,遇到一个需求,需要在一个深色风格的大屏页面中,嵌入 Google Maps。为了减少违和感,希望地图四边能够淡出过渡。 这里的“淡出过渡”,关键是淡出,而非降低透明度。 基于 Google Ma…...
电子元器件—电容和电感(一篇文章搞懂电路中的电容和电感)(笔记)(面试考试必备知识点)电容和电感作用、用途、使用、注意事项、特点等(面试必备)-笔记(详解)
作者:Whappy 座右铭:不曾拥有,何来失去! 时间:2024年8月2日08:40:04 一、电容的作用 储能: 电容器通过充电储存电荷在电容板上,形成电场储存电能。当需要释放储存的电能时,电荷…...
2024HDU Contest 5 Problem 5
题目链接 从大到小枚举gcd的值 d d d,以及编号为 d d d的倍数的点, [ d , 2 d , 3 d , … ] [d,2d,3d,\dots] [d,2d,3d,…]。 然后对于任何一条边 ( x , y ) (x,y) (x,y),如果 x x x的子树和 y y y的子树里都有编号为 d d d倍数的点…...
nGQL入门
引言 nGQL(NebulaGraph Query Language)是用于操作 NebulaGraph 的查询语言。它的语法类似于 Cypher,但有自己独特的特性。以下是一些 nGQL 的基本语法和操作示例,以帮助你入门。 基本概念 节点(Vertex)…...
[CP_AUTOSAR]_系统服务_DEM模块(二)功能规范介绍
目录 1、DEM 功能规范描述1.1、Startup behavior1.2、Monitor re-initialization 在前面 《[CP_AUTOSAR]_系统服务_DEM模块(一)》文中,简要介绍了 DEM 模块的功能、与其它模块之间的功能交互,本文将接着介绍 DEM 模块的功能规范。…...
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
文章目录 一、常见Linux发行版本二、Linux中yum、rpm、apt-get、wget的区别2.1 yum2.2 rpm2.3 apt-get2.4 wget2.5 总结 三、CentOS中yum的作用3.1 yum清空缓存列表3.2 yum显示信息3.3 yum搜索、查看3.4 yum安装3.5 yum删除、卸载程序3.6 yum包的升级、降级 四、Ubuntu中apt-ge…...
IPython的使用技巧2
关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导; 推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的…...
win10打开程序闪退的解决方法,亲测好用
当我们在使用win10系统的时候,可能会遇到安装某些程序后无法正常使用,一打开就闪退,或者点击右下角图标就消失了,而其他程序却可以正常打开使用。下面小编就来和大家分享亲测好用的win10打开程序闪退的解决办法。 问题原因分析&a…...
木舟0基础学习Java的第二十一天(数据库,MySQL,SQLyog)
数据库 数据库:按照数据结构来组织 存储数据的厂库 数据管理系统(Database Management System,DBMS):一套操作和管理数据库的软件 用于简历 使用 维护数据库 关系型数据库:采用关系模型作为数据组织方式 逻辑结构是一张二维表 由行和列组成…...
python-鼠标绘画线条程序
闲来无聊简单编写了一个绘图小程序。 主要思路 主要是基于Python中的内置模块turtle编写的,简单扩展了一下,通过绑定事件能够达到鼠标绘制、删除、存储已经绘制图案的线条这几个功能。 路径结构 -draw- define.py- main.py- myturtle.py使用 点住鼠…...
【Python实战】如何优雅地实现 PDF 去水印?
话接上篇,自动化处理 PDF 文档,完美实现 WPS 会员功能 小伙伴们更关心的是如何去除 PDF 中的水印~ 今天,就来分享一个超简单的 PDF 去水印方法~ 1. 原理介绍 在上一篇中,我们介绍了如何将 PDF 文档转换成图片,图片…...
Keysight(原Agilent) E4980AL 精密 LCR 表特性与技术指标
Keysight(原Agilent) E4980AL 精密 LCR 表为基础 LCR 表树立了行业标准,可在多个频率范围内提供更佳的精度、速度和通用性。E4980AL 结合了种类繁多的附件,适用于一般研发和生产环境中的各种元件和材料测量。也可通过频率升级而提升投资回报率。 Keysig…...
【运维】Redis主从复制 配置
【运维】Redis主从复制 配置 主库配置Master # 默认情况下,是 启用保护模式的,其他主机的客户端无法连接到 Redis 。当想要其他主机的客户端连接到 Redis 时,需要修改为 no 。protected-mode no 从库配置Slave # replicaof [master主机ip] …...
C++ 微积分 - 求导 - 自动微分(Automatic Differentiation)
C 微积分 - 求导 - 自动微分(Automatic Differentiation) flyfish 自动微分(Automatic Differentiation,简称 AD)是一种用于精确计算函数导数的技术。它结合了符号微分的准确性和数值微分的效率。自动微分的核心思想…...
面试题-每日5道
26.在 Queue 中 poll()和 remove()有什么区别? 相同点:都是删除第一个元素并返回。 不同点:如果没有元素poll()会返回null,而remove()会抛出NoSuchElementException异常 27.哪些集合类是线程安全的? Vector,Stock,Hashtable都是线程安全的&a…...
STM32卡死、跑飞如何调试确定问题
目录 前言 一、程序跑飞原因 二、调试工具 2.1Registers工具 2.2 Memory工具 2.3 Disassembly工具 2.4 Call Stack工具 三、找到程序跑飞位置 方式一、 方式二、 前言 我们初学STM32的时候代码难免会出现疏忽,导致程序跑飞,不再正常运行&#…...
代理模式和Spring MVC
Spring是一个分层的轻量级的开源Java框架。核心是IOC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程) AOP 面向切面 AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想&#x…...
深入理解Vue slot的原理
文章目录 前言为什么需要插槽作用域插槽插槽的原理总结 前言 插槽是Vue中一个重要的特性,它有很多种用法:默认插槽、具名插槽、作用域插槽。尤其作用域插槽,还有一堆特性,比如解构prop,解构prop的时候还可以进行属性名…...
git fetch作用与用法
目录 git fetch作用 git fetch用法 git fetch作用 git fetch 命令在 Git 版本控制系统中扮演着重要的角色。其主要作用是从远程仓库获取最新版本的项目文件,但不会自动合并或修改你当前的工作。这意味着,使用 git fetch 后,你需要手动合并…...
pycharm如何查看git历史版本变更信息
通过名字查看不同版本 查看版本不同地方...
【2.2 python中的变量】
2.2 python中的变量 在Python中,变量是存储数据值的容器。Python是一种动态类型语言,这意味着你不需要在声明变量时指定变量的类型;Python会根据你赋给变量的值自动确定其类型。下面我将详细介绍Python中的变量,包括保留字&#…...
Python软体中找出一组字符串的最长公共前缀:算法与实现
Python软体中找出一组字符串的最长公共前缀:算法与实现 在处理字符串数据时,寻找多个字符串之间的共同特征是一个常见的需求。特别是在文件名、URL、或其他文本数据中,找到最长公共前缀(Longest Common Prefix, LCP)可以帮助我们进行更高效的搜索和分类。本文将详细介绍如…...
git lfs使用(huggingface下载大模型文件)-教程记录
写的比较清楚的教程,用于之后有需求时查找用: https://blog.csdn.net/flyingluohaipeng/article/details/130788293...
1. 什么是操作系统
文章目录 1.1 从功能上来看操作系统1.2 硬件资源 1.1 从功能上来看操作系统 对用户来说,操作系统是一个控制软件,可以用来管理应用程序,它可以限制不同的程序来占用的资源。对内部的软件来说,操作系统是一个管理外设和分配资源的…...
数据科学 - 数据预处理 (数据清洗,结构化数据)
1. 前言 数据清洗与结构化数据在数据分析和机器学习项目中扮演着至关重要的角色。随着大数据时代的到来,数据的质量、准确性和可用性成为决定项目成功与否的关键因素。 数据清洗提高数据质量,保证数据集的一致性;促进数据分析与挖掘…...
基于SpringBoot+Vue的校车调度管理系统(带1w+文档)
基于SpringBootVue的校车调度管理系统(带1w文档) 基于SpringBootVue的校车调度管理系统(带1w文档) 如今,因为无线网相关技术的快速,尤其是在网上进行资源的上传下载、搜索查询等技术,以及信息处理和语言开发技术的进步,同时编程语…...
wordpress只显示到菜单/如何查看一个网站的访问量
2019独角兽企业重金招聘Python工程师标准>>> #include <iostream> #include <cv.h> #include <highgui.h> using namespace std;/************************************* *目的:亮度变换(亮度增强或者亮度减弱)…...
专门做正品的网站/搜索引擎优化的方法包括
前言 Redis 是我们目前大规模使用的缓存中间件,由于他强调高效而又便捷的功能,得到了广泛的使用。单节点的Redis已经达到了很高的性能,为了提高可用性我们可以使用Redis 集群。本文参考了Rdis的官方文档和使用Redis官方提供的Redis Cluster工…...
电视台网站模版/如何做网络营销
C# 读取ini文件 ini文件介绍 ini文件是微软操作系统上的配置文件,格式如下 ;此处是注释 [section1] key1value1 key2value2 [section2] key3value3 注意: 注释符号为分号 c#操作ini文件的类 using System; using System.Collections.Generic; using Syst…...
做瞹瞹嗳视频网站在线观看/网络营销招聘岗位有哪些
夜光序言: 即使身边满是凄荒、冷淡与麻木,风也会吹得柔和,心也能寻得一份温存 正文:接下来~~,实战项目:一个拥有答题页面的微信小程序 上图为实际效果图 那么如何制作出来呢~ 点击“开始测试”按钮&#x…...
为什么很少用python做网站/百度竞价代运营公司
http://www.xue5.com/Mobile/iOS/623776.html...
wordpress模板免费下载/百度助手手机下载
SAS中format和informat是用来控制输入和输出的数据类型的。 其中format表示设置输入数据格式; informat设置输出数据格式...