将mysql表限制为一定大小并自动删除最旧的条目

时间:2013-01-11 15:38:50

标签: mysql

  

可能重复:
  How can I set a maximum number of rows in MySQL table?

是否有可能(以及如何)限制MySQL表(假设为100'000)并在限制到达时删除旧条目?

意思是,当我有100'000个条目并且出现100'001时,删除ID最小的条目并创建新条目(当然使用新ID)。

我希望MySQL自己处理这个问题,所以外部脚本不需要干涉。

我需要这个用于记录目的,这意味着,我想只保留一段时间的日志,比方说一周。也许MySQL可能只是删除条目,这些条目比它自己的一周还要早?

1 个答案:

答案 0 :(得分:2)

我建议触发器。这是确保在每次插入时考虑最大表大小的最佳方法。

How can I set a maximum number of rows in MySQL table? 的可能重复

从那个接受的答案:


尝试限制向表中添加新记录。要添加新记录时引发错误。

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 ;

请注意,对于大型InnoDb表,COUNT操作可能会很慢。

在MySQL 5.5上,您可以使用SIGNAL语句引发错误。