MySQL триггер - вставлять в другую таблицу только тогда, когда данные отличаются - PullRequest
0 голосов
/ 11 декабря 2011

Я хочу вставить данные в другую таблицу, только если они отличаются.
Для этого я создал триггер на первой таблице, например:

CREATE TRIGGER `RegistrationHistory` AFTER UPDATE ON `registration`
FOR EACH ROW
INSERT INTO registration_history (`Key`, `Name`, `Version`, `LastUpdate`)
SELECT OLD.Key, OLD.Name, OLD.Version, NOW()
WHERE OLD.Key != NEW.Key
AND OLD.Name != NEW.Name
AND OLD.Version != NEW.Version

Проблема в том, что он выдает ошибку:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса рядом с "ГДЕ СТАРЫЙ. Ключ! = НОВЫЙ. Ключ

Я заметил, что если я попробую, это тоже не сработает:

SELECT 'ACBDE'
WHERE 1 = 1

Так как мне вставлять в таблицу истории, используя MySQL, только когда есть разница?

1 Ответ

1 голос
/ 11 декабря 2011

Попробуйте добавить оператор if:

CREATE TRIGGER `RegistrationHistory` AFTER UPDATE ON `registration`
FOR EACH ROW BEGIN
  IF (NEW.Key != OLD.Key AND NEW.Name != OLD.Name AND NEW.Version != OLD.Version) Then
    INSERT INTO registration_history (`Key`, `Name`, `Version`, `LastUpdate`)
        VALUES(NEW.Key, NEW.Name, NEW.Version, NOW());
  END IF;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...