Ответ 1
что-то вроде
DELIMITER //
CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
FOR EACH ROW
BEGIN
IF NEW.active <> OLD.active THEN
SET NEW.date = '';
END IF;
END
//
Я не знаю, возможно ли это, но у меня есть столбец с именем active
в таблице. Всякий раз, когда изменяется активный столбец, я хотел бы reset указать дату в столбце date
, но ТОЛЬКО, если столбец active
будет изменен.
Если другие столбцы изменены, но не столбцы active
, тогда дата останется прежней.
что-то вроде
DELIMITER //
CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
FOR EACH ROW
BEGIN
IF NEW.active <> OLD.active THEN
SET NEW.date = '';
END IF;
END
//
Включить проблему с тестом IF в примере # 2. Когда одно из значений null, < > test возвращает значение null. Это приводит к тому, что тест не выполняется, и действие триггера не будет запущено, даже если одно значение не равно нулю. Чтобы исправить это, я придумал этот тест, который использует <= > (NULL-safe equal). Надеюсь, это поможет кому-то.
DELIMITER $$
DROP TRIGGER IF EXISTS updtrigger ;
$$
CREATE TRIGGER updtrigger AFTER UPDATE
ON yourTable FOR EACH ROW
BEGIN
IF ((NEW.active <=> OLD.active) = 0) THEN
SET NEW.date = '';
END IF;
$$