【问题标题】:MySQL Trigger UPDATE date doesn't work when old value is NULL当旧值为 NULL 时,MySQL 触发器更新日期不起作用
【发布时间】:2018-12-10 12:29:12
【问题描述】:

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

你有什么想法吗?

谢谢

【问题讨论】:

  • 好吧,您似乎正在检查日期是否为空,如果不是,则更新日期。当值为空时,你永远不会说你想做任何事情,不是吗?

标签: mysql database triggers


【解决方案1】:

从技术上讲,不存在在更新中不提供值这样的事情,因为当不提供值时,这与提供当前/现有值完全相同。

NEW.UPDATE_DATE &lt;=&gt; 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多