技术笔记互联网如何在数据库表中实现自动生成时间戳和自动更新时间戳

数据库建表时,常常需要在新建记录的同时记下创建时间,并在更新记录时记下更新时间。除了通过编程语言来写入外,还可以使用数据库的默认值和触发器功能来自动更新这些数据,更加简单高效。

下面记录如何实现。

1.设置create_time默认值。

假设创建一张表,需要带上表记录的创建时间和每次更新的时间。

CREATE TABLE my_table (
  id SERIAL PRIMARY KEY,
  name VARCHAR(255),
  create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  update_time TIMESTAMP
);

其中,create_time是创建时间,使用类型TIMESTAMP表示使用不带时区的unix时间戳进行记录,DEFAULT CURRENT_TIMESTAMP表示创建记录时,该字段默认用当前系统时间的时间戳进行填充。

update_time是更新时间,也用类型TIMESTAMP,下一步看如何设置。

2.自动更新update_time值。

创建一个触发器(Trigger),使更新记录时自动将update_time字段值更新为当下的系统时间。

首先,定义触发器函数:

CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
  NEW.update_time = CURRENT_TIMESTAMP;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

然后,创建触发器,并调用触发器函数:

CREATE TRIGGER update_timestamp_trigger
BEFORE UPDATE ON my_table
FOR EACH ROW
EXECUTE PROCEDURE update_timestamp();

实现完成。当新建一条记录时,create_time字段值会自动填入当前系统时间的unix时间戳,update_time为空。当更新一条记录时,update_time字段会自动更新为当下系统时间的unix时间戳。