瀚高数据库中如何实现时间戳字段自动更新

1.使用默认值(Default Value) 适用创建时间,即:只适用于新增数据时的操作!
在创建表时,为时间字段设置默认值。.

CREATE TABLE your_table_name (
id SERIAL PRIMARY KEY,
data VARCHAR(255),
timestamp_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
...
);

如果已经有一张表,可以使用ALTER TABLE语句来添加默认值。

ALTER TABLE your_table_name ALTER COLUMN timestamp_column SET DEFAULT CURRENT_TIMESTAMP;

这样,每当您插入一个新的行时,时间字段将自动设置为当前时间戳。

2:使用触发器(Trigger) 适用更新时间
创建一个触发器函数,该函数将在INSERT或UPDATE操作时被调用。

CREATE OR REPLACE FUNCTION update_timestamp_column() RETURNS TRIGGER AS $$
BEGIN
NEW.timestamp_column := current_timestamp;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

这样,每当在您的表中有INSERT或UPDATE操作时,触发器就会自动更新时间字段。

3、实操一:

-- 类别表
CREATE TABLE categories (
    category_id VARCHAR PRIMARY KEY,
    category_name VARCHAR NOT NULL,
    creator VARCHAR NOT NULL,
     update_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);
COMMENT ON TABLE categories IS '存储所有项目类别信息';
COMMENT ON COLUMN categories.category_id IS '类别唯一标识';
COMMENT ON COLUMN categories.category_name IS '类别名称';
COMMENT ON COLUMN categories.update_timestamp IS '变更发生的时间';
COMMENT ON COLUMN categories.creator IS '创建者';

select category_id,category_id, category_name, creator, update_timestamp from categories;

ALTER TABLE categories ALTER COLUMN update_timestamp SET DEFAULT CURRENT_TIMESTAMP;


CREATE OR REPLACE FUNCTION update_timestamp_column() RETURNS TRIGGER AS $$
BEGIN
NEW.update_timestamp := now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
--
-- DROP TRIGGER IF EXISTS categories
-- ON categories CASCADE;

CREATE TRIGGER categories
BEFORE INSERT OR UPDATE ON categories
FOR EACH ROW
EXECUTE FUNCTION update_timestamp_column();

实操二:

drop TABLE if exists  sales_planning;
CREATE TABLE sales_planning (
    id VARCHAR(255) NOT NULL,
    year VARCHAR(255) NOT NULL,
    month VARCHAR(255) NOT NULL,
    company_name VARCHAR(255) NOT NULL,
    planned_sales_amount NUMERIC(15, 2) NOT NULL,
    planned_sales_volume INT NOT NULL,
     create_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    modified_by VARCHAR(255) NOT NULL,
    PRIMARY KEY (id, year, month, company_name)
);

COMMENT ON TABLE sales_planning IS '存储公司销售计划的表';
COMMENT ON COLUMN sales_planning.id IS '唯一标识符';
COMMENT ON COLUMN sales_planning.year IS '年份';
COMMENT ON COLUMN sales_planning.month IS '月份';
COMMENT ON COLUMN sales_planning.company_name IS '项目公司名称';
COMMENT ON COLUMN sales_planning.planned_sales_amount IS '计划销售金额';
COMMENT ON COLUMN sales_planning.planned_sales_volume IS '计划销售数量';
COMMENT ON COLUMN sales_planning.create_timestamp IS '记录创建的时间';
COMMENT ON COLUMN sales_planning.update_timestamp IS '记录最后更新的时间';
COMMENT ON COLUMN sales_planning.modified_by IS '记录最后修改人的用户名';
-- 创建用于更新修改时间的触发器函数
CREATE OR REPLACE FUNCTION update_time_column() RETURNS TRIGGER AS $$
BEGIN
NEW.update_time := now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 为sales_planning表添加更新修改时间的触发器
CREATE TRIGGER corporate_regulations
BEFORE UPDATE ON corporate_regulations
FOR EACH ROW
EXECUTE FUNCTION update_time_column();


DROP TRIGGER IF EXISTS corporate_regulations
ON corporate_regulations ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值