首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当旧值为空时,MySQL触发器更新日期无效

当旧值为空时,MySQL触发器更新日期无效
EN

Stack Overflow用户
提问于 2018-07-02 17:54:19
回答 1查看 665关注 0票数 0

当用户没有提供值时,我需要将时间戳字段更新为NOW()。

所以我写了这个触发器:

代码语言:javascript
复制
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。

你有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-03 08:42:58

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

在这两种情况下,NEW.UPDATE_DATE <=> OLD.UPDATE_DATE的计算结果都为true (不提供任何值,而不是提供现有值)。在触发器中,它们是无法区分的。

MySQL内置的时间戳功能实现了您正在寻找的东西,如果您在表定义中像这样声明列,则无需触发器。

代码语言:javascript
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51133440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档