【发布时间】:2021-07-08 09:42:29
【问题描述】:
假设我有一个包含几列的 mySQL 表:
id、姓名、工作、jobUpdatedAt
每当 job 列特别更改时,我希望 mySQL 自动更新 jobUpdatedAt 的时间戳。 (所以如果只是名称改变,它不会更新)
这样的事情可能吗?
谢谢
【问题讨论】:
-
如果您想纯粹从 MySQL 处理,您可能需要一个触发器。否则,您可以创建执行更新的应用程序逻辑。
假设我有一个包含几列的 mySQL 表:
id、姓名、工作、jobUpdatedAt
每当 job 列特别更改时,我希望 mySQL 自动更新 jobUpdatedAt 的时间戳。 (所以如果只是名称改变,它不会更新)
这样的事情可能吗?
谢谢
【问题讨论】:
CREATE TRIGGER trigger_name
BEFORE UPDATE
ON table_name
FOR EACH ROW
SET NEW.jobUpdatedAt = CASE WHEN OLD.job = NEW.job
THEN OLD.jobUpdatedAt
ELSE CURRENT_TIMESTAMP
END;
jobUpdatedAt 只会在job 被事实更新时才会被更新。
如果查询尝试显式更新jobUpdatedAt,将被保存。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=1b48bce653eb9a1d778e406fa5af894a
【讨论】:
WHEN OLD.job <=> NEW.job 也会考虑空值。