2

有没有办法或选项MySQL来固定表格的大小?它将作为循环缓冲区工作,并在插入新数据时覆盖旧数据。当应用程序正在收集统计数据并且一个月前的数据不再有用时,这很有用。

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

顺便说一句,这类似于MongoDb 中称为capped collection的功能。

4

2 回答 2

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;
于 2013-06-27T05:58:00.650 回答
0

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

于 2013-06-27T05:58:08.070 回答