可能好多猿有疑惑,为什么要使用触发器,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触发器实例相关推荐

  1. PostgreSQL — 数据库实例只读锁定

    目录 文章目录 目录 PostgreSQL 数据库实例只读锁定 硬锁定 硬解锁 软锁定 软解锁 PostgreSQL 数据库实例只读锁定 在一些场景中,可能要将数据库设置为只读模式.例如:需要对数据库 ...

  2. SQL触发器实例讲解1

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有三种:分别应 ...

  3. PostgreSQL触发器的使用

    原文: https://www.yiibai.com/postgresql/postgresql-trigger.html -------------------------------------- ...

  4. SQL触发器实例讲解

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有三种:分别应用于Insert , ...

  5. SQL中触发器实例讲解(转)

    SQL中触发器实例讲解 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.      常见的触发器有三种:分别应 ...

  6. 存储过程,游标和触发器实例

    存储过程,游标和触发器实例 原文:存储过程,游标和触发器实例 自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录declare @User ...

  7. 触发器实例精讲-志在必得

    SQL触发器实例精讲,必看必会 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有 ...

  8. Oracle Tigger触发器 实例

    Oracle Tigger触发器 实例 --实例1------------------------ --创建触发器,当用户对test表执行DML语句时,将相关信息记录到日志表 --创建测试表 CREA ...

  9. SQL触发器实例讲解(本文是来自百度文库)

    我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分享下给大家. 定义: 何为触发器?在SQL Server里面也就是对某一 ...

  10. SQL触发器实例讲解(转)

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.       常见的触发器有三种:分别应用于Insert , ...

最新文章

  1. 伺服驱动器接线怎么画_百格拉伺服驱动器维修常见故障现象及处理方法
  2. vim无法打中文_vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight
  3. NodeJS学习笔记(四) events,util模块
  4. 【原创】贴片电容的测量方法。。。这是我从自己QQ空间转过来的,本人实操!...
  5. Ubuntu 16.04工具栏靠下设置
  6. K-Backup备份office文件的具体操作。
  7. golang reflect
  8. 浅说深度学习(2):简史
  9. 计算正方形面积和周长_小学三年级数学下册长方形和正方形面积计算练习题(无答案)...
  10. jquery-pjax
  11. Map、List、Set在Java中的各种遍历方法
  12. Sophos 修复严重的防火墙 RCE 漏洞
  13. 诺基亚S40系统手机使用技巧大全(此乃刘某整理)
  14. 深入理解栈(Stack)
  15. 卡特彼勒CAT SIS 售后服务系统3D零件图系统软件 2019年最新版
  16. Uplift 经典模型介绍
  17. 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
  18. 天呐。怎么修改上传资源积分的?
  19. 35岁鞋不合脚的问题
  20. 如何拿到阿里offer的?面试流程及面试题

热门文章

  1. 模糊控制 之 模糊集,隶属函数,模糊关系
  2. java中的杨辉三角形_Java编写杨辉三角
  3. 在Centos操作系统下安装mysql8.0
  4. 3.6 矩阵秩的其它重要关系
  5. 点击邮箱名跳转到相对应的邮箱登陆页面
  6. win10台式机前置耳机无声音解决方案
  7. 各类编程开发软件及资源全版本下载地址合集
  8. php的ob缓存详解
  9. Adobe Flash CS4 从入门到精通
  10. 将OSM地图转化成OpenDRIVE