MySQL « Как обойти блокировку таблицы в триггере?
Есть таблица в которой храниться события системы. Нужно хранить только определенное количество (а точнее не больше заданного количества) событий в таблицы. Для это я привязал к таблице триггер при вставке (INSERT), который проверяет количество строк и удалят (DELETE) самые поздние по дате. Количество строк для хранения храниться в другой таблице и должно меняться по требованию пользователя.
Но я не учел что, при использованию хранимых процедур и триггеров, таблица блокируются.
#1442 — Can't update table 'tablename' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Как это можно обойти, если это вообще возможно обойти?
Знаю что есть вариант с кроном (cron), но хочеться чтоб это делала сама СУБД.
Но я не учел что, при использованию хранимых процедур и триггеров, таблица блокируются.
#1442 — Can't update table 'tablename' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Как это можно обойти, если это вообще возможно обойти?
Знаю что есть вариант с кроном (cron), но хочеться чтоб это делала сама СУБД.
1 ответов
Ваш подход слишком ударяет по производительности.
Если количество записей может быть не точно меньше заданной величины, то лучше использовать события: http://dev.mysql.com/doc/refman/5.1/en/events.html. Указываете частоту проверки и скрипт, удаляющий лишние записи.