当用户未提供值时,我需要将时间戳字段更新为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时除外。在这种情况下,它将保持为NULL。
你有什么主意吗?
谢谢
答案 0 :(得分:0)
从技术上讲,没有提供不提供更新值的东西,因为当没有提供值时,这与提供当前/现有值完全相同。
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
如果更新查询中未提供列值,但更新又更改了至少一列,则时间戳列将设置为NOW()
。