MySQL Trigger вопрос: только триггер при изменении столбца? - PullRequest
19 голосов
/ 04 ноября 2010

Я не знаю, возможно ли это, но у меня есть столбец с именем active в таблице.Всякий раз, когда активный столбец изменяется, я хотел бы сбросить дату в столбце date, но ONLY , если столбец active изменяется.

Если изменить другие столбцы, но не столбец active, тогда дата останется прежней.

Ответы [ 2 ]

32 голосов
/ 04 ноября 2010

что-то вроде

DELIMITER //
 CREATE TRIGGER updtrigger BEFORE UPDATE ON mytable
     FOR EACH ROW
     BEGIN
     IF NEW.active <> OLD.active THEN
     SET NEW.date = '';     
     END IF;
     END
     //
15 голосов
/ 12 февраля 2013

В примере № 2 возникла проблема с тестом IF. Когда одно из значений является нулевым, тест <> возвращает нулевое значение. Это приводит к тому, что тест не будет выполнен, и действие триггера не будет запущено, даже если одно значение совсем не равно нулю. Чтобы исправить это, я придумал этот тест, который использует <=> (NULL-safe равный). Надеюсь, это поможет кому-то.

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;
$$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...