You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何实现类似MySQL ON UPDATE的行更新自动修改modified列时间戳

Oracle实现MySQL ON UPDATE自动更新时间戳功能的方案

实现思路

Oracle没有提供MySQL中ON UPDATE CURRENT_TIMESTAMP的原生语法,可通过「列默认值+行级触发器」的组合实现完全等效的效果:行插入时自动填充当前时间,行更新时自动刷新modified列为最新时间。

具体实现步骤

  • 第一步:创建表时为modified列设置默认值(若表已存在可单独执行加列语句)
    建表代码示例:
    CREATE TABLE test_table (
        id NUMBER PRIMARY KEY,
        content VARCHAR2(100),
        -- 插入行时自动填充当前时间
        modified TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL
    );
    
    已存在表的加列语句:
    ALTER TABLE test_table ADD modified TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL;
    
  • 第二步:创建行级更新触发器
    每次触发行更新操作时自动刷新modified列的值:
    CREATE OR REPLACE TRIGGER trg_update_modified
    BEFORE UPDATE ON test_table
    FOR EACH ROW
    BEGIN
        :NEW.modified := SYSTIMESTAMP;
    END;
    /
    

注意事项

  • 若只需要秒级时间精度,可将SYSTIMESTAMP替换为SYSDATE
  • 触发器必须指定BEFORE UPDATE,才能在数据写入前修改新行的字段值
  • 若需要指定只有特定字段更新时才刷新modified时间,可在触发器中加判断条件,例如只在content字段更新时才刷新:
    CREATE OR REPLACE TRIGGER trg_update_modified
    BEFORE UPDATE OF content ON test_table
    FOR EACH ROW
    BEGIN
        :NEW.modified := SYSTIMESTAMP;
    END;
    /
    

内容的提问来源于stack exchange,提问作者jebath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:09:00