MySQL触发器更新日期不为';旧值为空时不工作

MySQL触发器更新日期不为';旧值为空时不工作,mysql,database,triggers,Mysql,Database,Triggers,当用户没有提供值时,我需要将Timestamp字段更新为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.UPDA

当用户没有提供值时,我需要将Timestamp字段更新为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
CREATE TRIGGER TRG\u SAS\u MASTERDATA\u TO\u IPS\u SI\u UPDATE\u DATE
将SAS_MASTERDATA_更新为_IPS_SI之前
每行
开始
如果!(NEW.UPDATE_DATE NULL)然后
设置NEW.UPDATE_DATE=NOW();
如果结束;
结束
它运行良好,但时间戳的旧值为空时除外。在本例中,它保持为NULL

你知道吗


感谢

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

NEW.UPDATE\u DATE OLD.UPDATE\u DATE
将在这两种情况下计算为true(不提供值与提供现有值)。在触发器中,它们是不可辨别的

MySQL的内置时间戳功能实现了您要查找的内容,如果您在表定义中声明这样的列,则不需要触发器

UPDATE_DATE TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP


如果更新查询中未提供列值,但更新更改了至少一个其他列,则时间戳列将设置为
NOW()

嗯,您似乎在检查日期是否为空,如果不是空,则更新日期。当值为null时,您从未声明要执行任何操作,不是吗?