wystarczy prosta procedura ktorej cialo wyglada tak:
BEGIN DECLARE t INT;
DECLARE current_date DATETIME;
SELECT NOW() INTO current_date; SELECT COUNT(*) INTO t FROM tabela WHERE data_dod < (current_date - INTERVAL 30 DAY);
IF (t > 1000) THEN
DELETE FROM tabela ORDER BY data_dod LIMIT 1000 ;
ELSE
DELETE FROM tabela WHERE data_dod < (current_date - INTERVAL 30 DAY);
END IF;
END
uzylem tutaj zmiennej current_date do przechowania biezacej daty zamiast uzywac wszedzie funkcji NOW(), dlatego ze funkcja NOW jest funkcja niedeterministyczna i musialaby byc uruchamiana dla kazdego wiersza w tabeli, a tak jest raz - dzieki czemu zyskujemy troszke na szybkosci, szczegolnie w duzych tabelach
UPDATE:
na poczatku zle Cie zrozumialem, dlatego podana przeze mnie procedura usunie 1000 wpisow zamiast usunac x wpisow a zostawic tylko 1000. ale juz poprawienie jej nie powinno dla Ciebie stanowic zadnego problemu.