LINUX.ORG.RU

mysql: DELETE в триггере BEFORE INSERT

 , , ,


0

1

Здравствуйте, есть таблица внутри которой есть поле типа DATETIME. Необходимо, чтобы при добавлении новых записей в нее - удалялись все старые (старше 2х дней) записи из данной таблицы и соседней.

Содержимое триггера before insert schedule_personnel:

delete from schedule_personnel where datediff(now(), schedule_personnel.`end`) > 2;

delete from schedule_patients where datediff(now(), schedule_patients.`time`) > 2;

В данном виде триггер не работает.

Can't update table 'schedule_personnel' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

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

delete from schedule_patients where datediff(now(), schedule_patients.`time`) > 2;

Если в триггере сработавшем на добавление производится удаление строки, то вроде никаких дополнительных срабатываний этого же триггера не должно быть.

Вопрос: Как удалить строки в триггере на добавление для той же таблицы что и вызвала триггер?

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

Atlant ★★★★★
()
Ответ на: комментарий от Atlant

В качестве костыля могу удалять старые записи с помощью триггера повешенного на событие другой таблицы, но самая подходящая ситуация для удаления как раз при добавлении в данную таблицу. Подключать внешнюю сущность в виде планировщика вообще не хочется.

preepunk
() автор топика
Ответ на: комментарий от Atlant

Спасибо, не знал про планировщик в mysql. Насколько это решение подходит в рамках развертывания на различающихся версиях/дистрибутивах mysql нужно будет изучить.

preepunk
() автор топика
Ответ на: комментарий от preepunk

согласно документации с версии 5.1, т.е. все достаточно современные.

Atlant ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.