Мне нужно обновить поле 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.
Есть ли у вас какие-либо идеи?
Спасибо
Технически нет такой вещи, как отсутствие значения в обновлении, потому что когда не задано никакого значения, это точно так же, как предоставление текущего/существующего значения.
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()
.