2013-06-27 36 views
2

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

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

顺便提一下,这与MongoDb中名为capped collection的功能类似。

回答

0

如果你想扔掉上个月的数据,只需使用该月的某一天的你首要的关键。上个月的“26”将被下个月的“26”覆盖。

+0

我发现在MySQL中没有这样的自动操作,但我已经使用你的方法来建立这样的能力。 –

0

我不认为有一个具体的选择来实现这一点,但是,你可以使它使用一个简单的触发器。 (我知道这是一个纲领性的方式,但我相信这是在MySQL中唯一的纯-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;