Автоматическое удаление строк из таблицы журнала в MySQL DB с помощью триггера - PullRequest
3 голосов
/ 23 января 2011

Может ли кто-нибудь предоставить мне код создания триггера mysql 5, который позволил бы мне удалить первое x количество строк в таблице, когда общее количество строк в моей таблице достигнет y?

Спасибо

1 Ответ

3 голосов
/ 23 января 2011

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

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

INSERT INTO LOGTABLE .....   # 1 record
DELETE FROM LOGTABLE ORDER BY ID LIMIT 1;

РЕДАКТИРОВАНИЕ: для лучшего решения

Более разумной альтернативой является планирование задания (планировщик задач Windows + mysql.exe or linux + cron), которое будет запускать этот пакет, в котором сохраняются только 100 (измененных для соответствия) записей

set @sql := (select count(*) from logtable) - 100;
set @sql := concat('delete from logtable order by date limit ', @sql);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
...