我想做一个触发器来记录任何更新的时间如下:
CREATE TRIGGER col_update
AFTER UPDATE ON col
FOR EACH ROW BEGIN
UPDATE col SET updated=NOW() WHERE id=NEW.id; // or OLD.id
END问题是,当这个触发器试图更新updated列时,它也是另一个update事件,它运行触发器。这将创建一个无限循环,但不起作用。
如何将更新时间存储在相应的列中?
我希望使用触发器,因为表中有许多列。如果我试图手动设置更新时间,则需要修改许多查询。
发布于 2012-07-03 17:00:24
使用BEFORE触发器,并设置为NEW.updated分配值的updated列(这将是一个简单的赋值,而不是UPDATE)。这样你就不会触发额外的UPDATEs了。
你的触发体看起来就像
SET NEW.updated = NOW()我通常只使用AFTER触发器来修改其他表,使用BEFORE来修改新的(或更新的)行,或者抑制DELETE。
发布于 2017-11-06 10:29:24
如果与您的情况一样,每次更改记录时都要更改更新的字段,则不需要触发器。
您可以像这样使用MySQL的自动初始化/更新:
ALTER TABLE `yourtabelname` ADD `updated` DATETIME on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP或者在创建表时,从医生那里:
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);发布于 2021-08-19 19:46:53
使用,时(pg_trigger_depth() < 1)
CREATE TRIGGER trigger_name
after insert or update
ON [TABLE] FOR EACH ROW
WHEN (pg_trigger_depth() < 1)
EXECUTE PROCEDURE public.proc_name();https://dba.stackexchange.com/questions/20328
复制相似问题