1

Тема: проблема с триггером

есть таблица `master_table`

создаю триггер

create trigger `clear_table` after insert on `master_table`
for each row
delete from `master_table` where time_d<now()

проблема в том, что до загрузки триггера добавление новых записей происходит нормально, а после загрузки триггера (проходит успешно) и попытки добавить новую запись вылазит ошибка:
#1442 - Can`t update table `master_table` in stored function/trigger because it is already used by statement which invoked this stored

не могу понять в чём проблема. Я хочу после каждого добавления новой записи, удалять все другие старше указанного времени (использовал now() что б всё выражение не писать)

или может есть какое то другое решение?

использую phpMyAdmin 2.6.1 MySQL 5.0.45

если не сложно, просьба отправить ответ по почте...

2

Re: проблема с триггером

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

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