У меня есть промышленная система, которая записывает сигналы тревоги в удаленно размещенную базу данных MySQL. Промышленная система вставляет новую строку всякий раз, когда свойство сигнала тревоги изменяется (например, время, когда сигнал был активирован, подтвержден или выключен), в таблицу с именем «сигналы тревоги».
Я не хочу нескольких записей для каждой тревоги, поэтому я настроил два триггера базы данных. Первый триггер отражает каждую новую запись во вторую таблицу, создавая / обновляя строки по мере необходимости. Вторая таблица ('alarm_display') имеет столбец 'Tag', установленный в качестве первичного ключа. Таблица «Тревога» не имеет первичного ключа. Код для этого триггера:
CREATE TRIGGER `mirror_alarms` BEFORE INSERT ON `alarms`
FOR EACH ROW
INSERT INTO `alarm_display` (Tag,...,OffTime)
VALUES (new.Tag,...,new.OffTime)
ON DUPLICATE KEY UPDATE OnDate=new.OnDate,...,OffTime=new.OffTime
Второй триггер должен выполняться после первого и (в идеале) удалить все строки из таблицы аварийных сигналов. (Я использовал свойство Tag тревоги, потому что свойство Tag никогда не изменяется, хотя я подозреваю, что мог бы просто использовать оператор «DELETE FROM alarms WHERE 1» для того же эффекта).
CREATE TRIGGER `remove_alarms` AFTER INSERT ON `alarms`
FOR EACH ROW DELETE FROM alarms WHERE Tag=new.Tag
Моя проблема в том, что второй триггер не запускается, или, если это так, второй триггер не удаляет строки из базы данных.
Итак, вот вопрос: почему мой второй триггер не выполняет то, что я от него ожидаю?