postgresql触发器实例
可能好多猿有疑惑,为什么要使用触发器,postgresql不是可以设置字段默认值吗。
首先先了解清楚字段默认值和触发器功能的区别:
1. 字段默认值:
ALTER TABLE public.so_cars_roadplans ALTER COLUMN id SET DEFAULT nextval('so_cars_roadplans_id_seq'::regclass);
好多web项目采用java SSH架构,hibernate最明显的就是实体映射,实体与表结构对应。假如我们默认值字段实体映射时,表单填值了,我们字段默认就不会生效,这个坑我当时遇到,后期就采用触发器方式解决。
2. 触发器:
触发器与字段默认模式最大的区别,就是在于时间顺序。
字段默认可以实时更新,举个例子,插入一条新纪录,实时就能根据默认值填充。
触发器执行有before和after两种:
before表示在insert、update或者delete记录之前执行,after表示在记录之后执行。
先看看postgresql触发器代码格式:
CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name
ON table_name
[ -- Trigger logic goes here....
];CREATE TRIGGER trigger_name AFTER INSERT ON column_name
ON table_name
[ -- Trigger logic goes here....
];
下面针对一个触发器例子来讲解:
需求是我们要在so_cars_roadplans表中插入一条数据,同时,保证字段correlationid默认赋值uuid编码
a. 我们先使用insert语句执行新增插入数据;
b. 插入完成触发update语句,针对插入的记录,将uuid编码赋值给correlationid字段。
(1)首先创建一个名为update_roadplans_funcs的函数/过程
我们创建一个update触发器,用于修改数据
-- Function: public.update_roadplans_funcs()-- DROP FUNCTION public.update_roadplans_funcs();CREATE OR REPLACE FUNCTION public.update_roadplans_funcs()RETURNS trigger AS
$BODY$ BEGIN UPDATE so_cars_roadplans SET correlationid = uuid_generate_v1() where id = NEW.ID;RETURN NEW;END;
$BODY$LANGUAGE plpgsql VOLATILECOST 100;
ALTER FUNCTION public.update_roadplans_funcs()OWNER TO postgres;
这里面有个NEW对象,表示insert记录record,注意where条件,不然就全部记录修改了。
(2)之后创建触发器TRIGGER,表示在insert之后触发update_roadplans_funcs函数/存储过程
-- Trigger: update_roadplans_trigger on public.so_cars_roadplans-- DROP TRIGGER update_roadplans_trigger ON public.so_cars_roadplans;CREATE TRIGGER update_roadplans_triggerAFTER INSERTON public.so_cars_roadplansFOR EACH ROWEXECUTE PROCEDURE public.update_roadplans_funcs();
(3)最后我们是用insert语句插入记录验证触发器是否生效
INSERT INTO "public"."so_cars_roadplans" ("id", "type") VALUES (351,'3');
我们看到correlationi字段uuid编码已经生成
我们的触发器功能就完全实现了,希望能帮到大家。
最后贴一些大神的触发器博文链接,供大家膜拜
https://www.yiibai.com/postgresql/postgresql-trigger.html
https://blog.csdn.net/neo_liu0000/article/details/6255623
postgresql触发器实例相关推荐
- PostgreSQL — 数据库实例只读锁定
目录 文章目录 目录 PostgreSQL 数据库实例只读锁定 硬锁定 硬解锁 软锁定 软解锁 PostgreSQL 数据库实例只读锁定 在一些场景中,可能要将数据库设置为只读模式.例如:需要对数据库 ...
- SQL触发器实例讲解1
SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应 ...
- PostgreSQL触发器的使用
原文: https://www.yiibai.com/postgresql/postgresql-trigger.html -------------------------------------- ...
- SQL触发器实例讲解
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , ...
- SQL中触发器实例讲解(转)
SQL中触发器实例讲解 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应 ...
- 存储过程,游标和触发器实例
存储过程,游标和触发器实例 原文:存储过程,游标和触发器实例 自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录declare @User ...
- 触发器实例精讲-志在必得
SQL触发器实例精讲,必看必会 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有 ...
- Oracle Tigger触发器 实例
Oracle Tigger触发器 实例 --实例1------------------------ --创建触发器,当用户对test表执行DML语句时,将相关信息记录到日志表 --创建测试表 CREA ...
- SQL触发器实例讲解(本文是来自百度文库)
我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分享下给大家. 定义: 何为触发器?在SQL Server里面也就是对某一 ...
- SQL触发器实例讲解(转)
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , ...
最新文章
- 伺服驱动器接线怎么画_百格拉伺服驱动器维修常见故障现象及处理方法
- vim无法打中文_vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight
- NodeJS学习笔记(四) events,util模块
- 【原创】贴片电容的测量方法。。。这是我从自己QQ空间转过来的,本人实操!...
- Ubuntu 16.04工具栏靠下设置
- K-Backup备份office文件的具体操作。
- golang reflect
- 浅说深度学习(2):简史
- 计算正方形面积和周长_小学三年级数学下册长方形和正方形面积计算练习题(无答案)...
- jquery-pjax
- Map、List、Set在Java中的各种遍历方法
- Sophos 修复严重的防火墙 RCE 漏洞
- 诺基亚S40系统手机使用技巧大全(此乃刘某整理)
- 深入理解栈(Stack)
- 卡特彼勒CAT SIS 售后服务系统3D零件图系统软件 2019年最新版
- Uplift 经典模型介绍
- 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
- 天呐。怎么修改上传资源积分的?
- 35岁鞋不合脚的问题
- 如何拿到阿里offer的?面试流程及面试题