旧值为NULL时,MySQL触发器UPDATE日期不起作用

时间:2018-07-02 09:54:19

标签: mysql database triggers

当用户未提供值时,我需要将时间戳字段更新为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。

你有什么主意吗?

谢谢

1 个答案:

答案 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()