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

标签 mysql

<分区>

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 语句来引发错误。

关于mysql - 将mysql表限制在一定大小并自动删除最旧的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14281510/

相关文章:

mysql根据不同的列值重复搜索

c# - 如何在 MySQL Entity Framework 中执行过程

php - 从mysql中检索数据并显示在html表中

mysql - Cloud SQL 和本地服务器上的显着查询时间差异

mysql - 优化代码以在一个巨大的表中填充一个新列

mysql - 如何在连接表发送的结果上添加动态列

sql - Mysql多对多计数和数学

php - 如何在一页上管理多个查询?

php - 使用 like 语句仅返回出现 x 次的命中

php - MySQL语法错误,对我没有任何意义