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
相关产品推荐
相关产品推荐

