У меня есть промышленная система, которая регистрирует сигналы тревоги в удаленно размещенной базе данных MySQL. Промышленная система вставляет новую строку всякий раз, когда свойство тревоги изменяется (например, когда будильник был активирован, подтвержден или отключен) в таблицу с именем «alarms».SQL-триггер для удаления строк из базы данных
Мне не нужны несколько записей для каждого будильника, поэтому я настроил два триггера базы данных. Первый триггер отражает каждую новую запись во второй таблице, создавая/обновляя строки по мере необходимости. Вторая таблица («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
Моя проблема заключается в том, что второй триггер не появляется, чтобы бежать, или, если это произойдет, второй триггер не удаляет строки из базы данных.
Итак, вот вопрос: почему мой второй триггер не делает то, что я ожидаю от него?
Awesome. Благодаря! Я надеялся сохранить все в SQL, но я думаю, что создам задание cron, чтобы периодически очищать базу данных :) – wpearse