У меня есть две таблицы concept_access и concept_access_log. Я хочу создать триггер, который срабатывает каждый раз, когда что-то удаляется из concept_access, проверяет, есть ли похожая запись в таблице журнала, а если нет, вставляет новую перед удалением из concept_access.
Я изменил триггер, и теперь он выглядит так. это:
DROP TRIGGER IF EXISTS before_delete_concept_access;
DELIMITER //
CREATE TRIGGER before_delete_concept_access
BEFORE DELETE ON `concept_access` FOR EACH ROW
BEGIN
IF (SELECT 1 FROM concept_access_log WHERE map=OLD.map
AND accesstype=OLD.accesstype AND startdate=OLD.startdate AND stopdate=OLD.stopdate) IS NULL THEN
INSERT INTO concept_access_log (map, accesstype, startdate, stopdate)
VALUES (OLD.map, OLD.accesstype, OLD.startdate, OLD.stopdate);
END IF;
END//
DELIMITER ;
Пример данных в concept_access перед удалением:
map accesstype startdate stopdate
1 public NULL NULL
1 loggedin 2011-05-11 NULL
1 friends NULL NULL
Таблица журнала уже имеет первые 2 строки. И они точно такие же, как в concept_access. Когда я удаляю первую строку из таблицы concept_access, я получаю следующее в таблице журнала:
map accesstype startdate stopdate
1 public NULL NULL
1 loggedin 2011-05-11 NULL
1 friends NULL NULL
1 public NULL NULL
Хотя вставлять что-либо не предполагается, потому что (1, public, null, null) там уже существует.
Эта таблица не имеет первичного ключа . Я не создавал структуру, поэтому не спрашивайте меня, почему. Его изменение испортит многие уже существующие функции. Мне просто нужно вести журнал того, что было удалено из таблицы concept_access
, и сохранять это в журнале без дубликатов.
Я был бы очень признателен, если бы кто-нибудь мог понять, что происходит не так.