Mysql
更新後觸發更新?
我想觸發將任何更新的時間記錄為:
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
列時,它也是另一個更新事件,它執行觸發器。這將創建一個不起作用的無限循環。如何將更新時間儲存在相應的列中?
我希望使用觸發器,因為表中有很多列。如果我嘗試手動設置更新時間,我需要修改許多查詢。
請改用
BEFORE
觸發器,並將updated
分配值的列設置為NEW.updated
(這將是一個簡單的分配,而不是UPDATE
)。這樣你就不會觸發額外UPDATE
的 s。你的觸發器體看起來就像
SET NEW.updated = NOW()
我通常
AFTER
只使用觸發器來修改其他表,BEFORE
修改新的(或更新的)行,或者抑制DELETE
。
如果像您的情況一樣,您想在每次更改記錄時更改更新的欄位,則不需要觸發器。
您可以像這樣使用 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 );