MySQL Trigger UPDATE дата не работает, когда старое значение NULL

0

Мне нужно обновить поле 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

Он работает хорошо, за исключением случаев, когда старое значение метки времени равно NULL. В этом случае он остается равным NULL.

Есть ли у вас какие-либо идеи?

Спасибо

  • 0
    Ну, похоже, вы проверяете, является ли дата нулевой, а если нет, то дата обновляется. Вы никогда не заявляете, что хотите что-либо делать, когда значение равно нулю, нет?
Теги:
database
triggers

1 ответ

0
Лучший ответ

Технически нет такой вещи, как отсутствие значения в обновлении, потому что когда не задано никакого значения, это точно так же, как предоставление текущего/существующего значения.

NEW.UPDATE_DATE <=> OLD.UPDATE_DATE будет оценивать значение true в обоих этих условиях (не предоставляя никакого значения или предоставляя существующее значение). Они неразличимы в триггере.

MySQL встроенная функциональность для timestamps реализует то, что вы ищете, без триггера, если вы объявите столбец, как это, в определении таблицы.

UPDATE_DATE TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP

https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

Если значение столбца не указано в запросе обновления, но по крайней мере один другой столбец изменяется обновлением, столбец временной метки будет установлен в значение NOW().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню