当用户没有提供值时,我需要将时间戳字段更新为NOW()。
所以我写了这个触发器:
CREATE TRIGGER TRG_SAS_MASTERDATA_TO_IPS_SI_UPDATE_DATE
BEFORE UPDATE ON SAS_MASTERDATA_TO_IPS_SI
FOR EACH ROW
BEGIN
IF !(NEW.UPDATE_DATE <=> NULL) THEN
SET NEW.UPDATE_DATE= NOW();
END IF;
END
它工作得很好,除了当时间戳的旧值为空的时候。在这种情况下,它保持为NULL。
你有什么想法吗?
谢谢
发布于 2018-07-03 08:42:58
从技术上讲,没有在更新中提供值这样的事情,因为当没有提供值时,这与提供当前/现有值完全相同。
在这两种情况下,NEW.UPDATE_DATE <=> OLD.UPDATE_DATE
的计算结果都为true (不提供任何值,而不是提供现有值)。在触发器中,它们是无法区分的。
MySQL内置的时间戳功能实现了您正在寻找的东西,如果您在表定义中像这样声明列,则无需触发器。
UPDATE_DATE TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
如果update查询中没有提供列值,但update至少更改了一个其他列,则timestamp列将被设置为NOW()
。
https://stackoverflow.com/questions/51133440
复制相似问题