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