2

SQL データベースに情報の行があるとします。30 日以上経過した情報の行を自動的に削除したいと考えています。

これは可能ですか?

追加情報:

日付を収集するために提供されている SQL 日付関数を使用しています。

4

2 に答える 2

3

この問題には次の 2 つの側面があります。

  • スケジュールの立て方
  • 実際の SQL ステートメント

スケジュール方法

複数のオプションがありますが、これらはすべて、スケジュールするかどうか、またはストアド プロシージャをトリガーするかどうかに関係しています。

3 つのオプション

  • MySql イベント スケジューリングを使用します: http://dev.mysql.com/doc/refman/5.1/en/events-overview.html
  • オペレーティング システム (CRON、SCHEDULED TASK) を介して、SQL (PHP スクリプト、Java など) を使用してアプリの実行をスケジュールします。
  • テーブルに変更が加えられるたびにストアド プロシージャを実行するトリガーを用意します。

オプション 1 と 2 が最適だと思います。

SQL ステートメント

insertDate を表すフィールド (dateField など) があれば、実際の SQL ステートメントは非常に簡単です...

delete from myTable where insertDate < DATE_SUB(NOW(), INTERVAL 1 MONTH);

この値はNOW()、insert ステートメント内で関数を使用して簡単に生成できます。次に例を示します。

insert into myTable values (NOW(), 'value1', 'value2', ... , 'valueN');

一日の終わりにイベント スケジューラを使用してスケジューリングする

権限がある場合、CREATE EVENTこれは PHP MyAdmin を通じて機能します。参照: http://www.sitepoint.com/how-to-create-mysql-events/

CREATE EVENT `clean_up2`
ON SCHEDULE EVERY 1 DAY STARTS CURRENT_DATE
DO
 delete from `data` where updated_on < DATE_SUB(NOW(), INTERVAL 1 MONTH);
END;
于 2013-06-20T01:27:42.500 に答える
0

はい。SQL Server では、ストアド プロシージャを作成して削除を実行し、毎日 (または選択したスケジュールで) 実行される SQL エージェント ジョブを作成できます。

于 2013-06-20T01:23:45.097 に答える