Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limiting mysql table to a sertain size and automatically deleting oldest entries [duplicate]

Tags:

mysql

Possible Duplicate:
How can I set a maximum number of rows in MySQL table?

Is it possible ( and how ) to put a limit on a MySQL table ( let's say 100'000 ) and deleting the old entries when limit reaches?

Meaning, when I have 100'000 entries and the 100'001 appears, the entry with the smallest ID is deleted and the new one is created ( with the new ID of course ).

I want MySQL to handle this on it's own, so no outside scripts need to interfere.

I need this for logging purposes, meaning, I want to keep logs only for a certain time period, let's say a week. Maybe it is possible for MySQL just to delete entries, that are older then 1 week on it's own?

like image 904
Peon Avatar asked Sep 12 '25 11:09

Peon


1 Answers

I propose triggers. This is the best way of insuring that at each insert the maximum table size is being taken into account.

Possible duplicate of How can I set a maximum number of rows in MySQL table?

From that accepted answer:


Try to make a restriction on adding a new record to a table. Raise an error when a new record is going to be added.

DELIMITER $$

CREATE TRIGGER trigger1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
  SELECT COUNT(*) INTO @cnt FROM table1;
  IF @cnt >= 25 THEN
    CALL sth(); -- raise an error
  END IF;
END
$$

DELIMITER ;

Note, that COUNT operation may be slow on big InnoDb tables.

On MySQL 5.5 you can use SIGNAL statement to raise an error.

like image 132
philwinkle Avatar answered Sep 14 '25 05:09

philwinkle