Mysql

更新後觸發更新?

  • August 19, 2021

我想觸發將任何更新的時間記錄為:

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
);

引用自:https://dba.stackexchange.com/questions/20328