テーブルが1時間ごとに定期的に入力されるデータベースがあります。現在、データサイズは大幅に増加しています。10日間のデータのみを保存したい。残りはすべて、1日が経過するたびに自動的に削除されます。
どうすればmysqlでそれを行うことができますか?
複数のオプション..
これを行うには、を記述cron job
します。(PHP / ASP / JSPの使用-作業しているものは何でも)
Event
mysqlでスケジュールする
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を実行し、それに応じてレコードを削除します(ここでの問題は、すべての挿入トリガーが呼び出されることです)。
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時間ごとにイベントがトリガーされます。
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