如何在MySQL中修复表大小?

时间:2013-06-27 05:39:36

标签: mysql mongodb

MySQL中是否有可用的方法或选项来修复表的大小?这将作为循环缓冲区工作,并在插入新数据时覆盖旧数据。当应用程序收集统计信息并且一个月的数据不再有用时,这非常有用。

我以编程方式知道这是可能的,但我不想这样做,因此请求。

BTW,这类似于MongoDb中名为capped collection的功能。

2 个答案:

答案 0 :(得分:0)

我不相信有一个特定的选项来实现这一点,但是,你可以使用一个简单的触发器使它工作。 (我知道这是一种编程方式,但我相信它是mysql中唯一的pure-sql选项)

CREATE TRIGGER `CapTable` BEFORE INSERT ON `MyTable` FOR EACH ROW BEGIN

    SET @NumRows = (SELECT COUNT(*) FROM MyTable); 
    IF @NumRows > 1000 THEN
        DELETE FROM MyTable ORDER BY id LIMIT 1; 
        /* delete the oldest row, assuming id is auto_increment */
    END IF;

END;

答案 1 :(得分:0)

如果您想丢弃上个月的数据,只需使用主键中的每月日期即可。上个月的“26”将被下个月的“26”覆盖。