MySQL Trigger UPDATE дата не работает, когда старое значение NULL - PullRequest
0 голосов
/ 02 июля 2018

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

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 03 июля 2018

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

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

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

UPDATE_DATE TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...