我是靠谱客的博主 不安鸵鸟,最近开发中收集的这篇文章主要介绍PostgreSQL创建触发器,实现自动更新时间戳,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

需求:在student里面有一个字段update_time,当该条记录发生变化的时候,该字段要发生相应的变化

1、student结构如下:

drop table if exists student;
create table student(
   id int primary key     not null,
   name        char(10)   not null,   
   address     char(50),
   create_time timestamp default current_timestamp,
   update_time timestamp default current_timestamp
);

插入数据的时候,就自动生成create_timeupdate_time

2、先插入几条数据

insert into student(id,name,address) values(1,'小明','广州');
insert into student(id,name,address) values(2,'小红','广西');
insert into student(id,name,address) values(3,'小甜甜','湖北');

3、读取数据在表里面的情况:

select * from student;

在这里插入图片描述
4、创建函数,用于更新update_time

create or replace function update_timestamp() returns trigger as
$$
begin
    new.update_time = current_timestamp;
    return new;
end
$$
language plpgsql;

函数有两个值newold,我们可以从old获得待处理的那条记录的信息,而new则是要新生成的那条记录,下面的触发器是设置为before,表示在那条记录发生前,这个触发器会先触发,从而执行该函数,这个函数的目的就是获得当前的时间戳,赋值到还没执行的SQL里面,相当于原先的SQL是这样的(假设更新了name字段)update 表 set name = xx where id = xx,经过触发器先处理后变成这样update 表 set name = xx ,update_time = 当前的时间戳 where id = xx

5、创建触发器,当student里面的字段发生变化的时候,就会触发这个触发器

create trigger auto_update_time 
	before update on student 
	for each row execute procedure update_timestamp();

此处除了before,触发器还有另外两种模式,一种是After,就是触发的SQL执行完再执行触发器的内容,After模式下,函数就没有必要return new,因为new执行完了,所以在这里不能设置为After【一开始就是设置为After,找了半天才发现】

6、更新一个字段测试一下

update student set name = '媛媛' where id = 1;

7、结果如下,还可以
在这里插入图片描述

最后

以上就是不安鸵鸟为你收集整理的PostgreSQL创建触发器,实现自动更新时间戳的全部内容,希望文章能够帮你解决PostgreSQL创建触发器,实现自动更新时间戳所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部