可能重复:
如何设置 MySQL 表中的最大行数?
是否有可能(以及如何)对 MySQL 表设置限制(比如说 100'000 )并在达到限制时删除旧条目?
意思是,当我有 100'000 个条目并且出现 100'001 时,将删除 ID 最小的条目并创建新条目(当然使用新 ID)。
我希望 MySQL 自己处理这个问题,所以不需要外部脚本干预。
我需要这个来记录日志,也就是说,我只想将日志保留一段时间,比如一周。也许 MySQL 有可能只删除超过 1 周的条目?
可能重复:
如何设置 MySQL 表中的最大行数?
是否有可能(以及如何)对 MySQL 表设置限制(比如说 100'000 )并在达到限制时删除旧条目?
意思是,当我有 100'000 个条目并且出现 100'001 时,将删除 ID 最小的条目并创建新条目(当然使用新 ID)。
我希望 MySQL 自己处理这个问题,所以不需要外部脚本干预。
我需要这个来记录日志,也就是说,我只想将日志保留一段时间,比如一周。也许 MySQL 有可能只删除超过 1 周的条目?
我建议触发器。这是确保在每次插入时都考虑最大表大小的最佳方式。
从那个接受的答案:
尝试限制向表中添加新记录。当要添加新记录时引发错误。
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 语句来引发错误。