Possible Duplicate:
How can I set a maximum number of rows in MySQL table?
是否有可能(以及如何)对 MySQL 表施加限制(比如 100'000)并在达到限制时删除旧条目?
意思是,当我有 100'000 个条目并且出现 100'001 时,具有最小 ID 的条目将被删除并创建新条目(当然是使用新 ID)。
我希望 MySQL 自行处理,因此无需外部脚本干预。
我需要这个用于记录目的,意思是,我只想在特定时间段内保留日志,比如一周。也许 MySQL 可以自行删除超过 1 周的条目?
我建议触发器。这是确保在每次插入时考虑最大表大小的最佳方法。
可能重复 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 ;
请注意,COUNT 操作在大型 InnoDb 表上可能会很慢。
在 MySQL 5.5 上,您可以使用 SIGNAL 语句来引发错误。