0

テーブルが1時間ごとに定期的に入力されるデータベースがあります。現在、データサイズは大幅に増加しています。10日間のデータのみを保存したい。残りはすべて、1日が経過するたびに自動的に削除されます。

どうすればmysqlでそれを行うことができますか?

4

3 に答える 3

0

複数のオプション..

これを行うには、を記述cron jobします。(PHP / ASP / JSPの使用-作業しているものは何でも)

Eventmysqlでスケジュールする

CREATE EVENT `event_name`
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
DO BEGIN
    DELETE * FROM tablename WHERE date < CURRENT_DATE - INTERVAL 10 DAY
END;

詳細については、http: //www.sitepoint.com/how-to-create-mysql-events/にアクセスしてください。

それ以外の場合はtrigger、INSERTを実行し、それに応じてレコードを削除します(ここでの問題は、すべての挿入トリガーが呼び出されることです)。

于 2013-01-09T09:44:31.420 に答える
0
CREATE EVENT 'eventname' ON 
SCHEDULE EVERY 24 HOUR STARTS '2013-01-09 10:00:00' 
ON COMPLETION NOT PRESERVE ENABLE 
COMMENT 'Clears out old data table each day.'
 DO 
      delete * from tablename WHERE fieldwithdateofinput < CURRENT_DATE - INTERVAL 10 DAY

これにより、そのレコードの入力が行われたときに登録された日付のフィールド(fieldwithdateofinput)があると仮定して、日付2013-01-09 10:00:00から、24時間ごとにイベントがトリガーされます。

于 2013-01-09T09:45:07.860 に答える
0

2つのオプションがあります。

1.イベントスケジューラ

最初にテーブルを作成し、3週間前のレコードを削除するための削除クエリを実行するためのイベントを作成します。

CREATE EVENT `ex1` ON SCHEDULE
EVERY 1 DAY
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT ''
DO BEGIN
DELETE FROM table WHERE DATEDIFF(NOW(),TimeStampColumn) > 10

END
//for 3 weeks

注:古いバージョンのmysqlにはイベントスケジューラがありません

2.cronジョブを作成します

file1.sql

DELETE FROM table WHERE DATEDIFF(NOW(),TimeStampColumn) > 10

このコマンドをスケジュールします。

mysql -uusername -ppassword </ path / to / file1.sql

于 2016-04-04T09:10:45.120 に答える