2

MySQLテーブルのサイズを修正する方法またはオプションはありますか? これは循環バッファとして機能し、新しいデータが挿入されるたびに古いデータを上書きします。これは、アプリケーションが統計を収集していて、1 か月前のデータが役に立たなくなった場合に役立ちます。

私はプログラムでこれが可能であることを知っていますが、それをしたくないので、この要求です。

ところで、これはMongoDbのcapped コレクションと呼ばれる機能に似ています。

4

2 に答える 2

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

先月のデータを破棄したい場合は、主キーでその月の日を使用してください。先月の「26」は翌月の「26」に上書きされます。

于 2013-06-27T05:58:08.070 に答える