MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで30日より古い行をすべて削除するクエリの書き方

30日より古いデータを一括で削除したい場合、MySQLでは DELETE文INTERVAL を組み合わせることで簡単に実現できます。比較演算子「<」を now() と併用すれば、現在日時よりも前のレコードをすべて削除対象として取得できます。

サンプルテーブルの作成

まずは動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
    -> (
    -> UserMessage text,
    -> UserMessageSentDate date
    -> );
Query OK, 0 rows affected (0.59 sec)

テストデータの挿入

続いて、INSERT文を使っていくつかのレコードを登録します。

mysql> insert into DemoTable values('Hi','2019-06-01');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable values('Hello','2019-07-02');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('Awesome','2019-05-04');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values('Good','2019-01-10');
Query OK, 1 row affected (0.35 sec)

登録済みデータの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

出力結果

+-------------+---------------------+
| UserMessage | UserMessageSentDate |
+-------------+---------------------+
| Hi          | 2019-06-01          |
| Hello       | 2019-07-02          |
| Awesome     | 2019-05-04          |
| Good        | 2019-01-10          |
+-------------+---------------------+
4 rows in set (0.00 sec)

4件のメッセージが登録されていることが確認できました。

30日より古い行を削除するクエリ

以下が、30日より古いレコードをすべて削除するクエリです。

mysql> delete from DemoTable where UserMessageSentDate < now() - interval 30 DAY;
Query OK, 3 rows affected (0.11 sec)

ポイントは now() - interval 30 DAY の部分です。これは「現在日時から30日前の時点」を計算しており、その日付より古い(小さい)値を持つレコードだけが削除されます。今回の例では3件が削除されました。

削除後のデータ確認

もう一度テーブルの中身を確認してみましょう。

mysql> select *from DemoTable;

出力結果

+-------------+---------------------+
| UserMessage | UserMessageSentDate |
+-------------+---------------------+
| Hello       | 2019-07-02          |
+-------------+---------------------+
1 row in set (0.00 sec)

30日以内の日付を持つ「Hello」の1件だけが残り、それ以外の古いレコードは正常に削除されています。

まとめ

MySQLで古いデータを定期的に整理したい場合は、WHERE カラム名 < now() - interval 30 DAY の形式が便利です。INTERVAL の単位は DAY 以外にも MONTH や HOUR なども指定できるため、保持期間に応じて柔軟に条件を変更できます。なお、カラムの型が DATETIME の場合は日付だけでなく時刻まで比較される点に注意してください。誤った条件での大量削除を防ぐため、本番環境で実行する前に必ず SELECT 文で対象レコードを確認しておくことをおすすめします。

  1. MySQLでタイムスタンプが5分より古いレコードを削除する方法

    MySQLでは、DELETE文とNOW()関数、INTERVAL演算子を組み合わせることで、指定した時間より古いレコードを簡単に削除できます。この記事では、タイムスタンプが現在時刻から5分より古いレコードを削除する具体的な手順を、サンプルコード付きで解説します。 1. サンプルテーブルの作成 まず、動作を確認するためのテーブルを作成します。ここではDATETIME型のカラムを持つシンプルなテーブルを用意しましょう。 mysql> create table DemoTable1851 ( DueDate datetime ); Query OK, 0 rows a

  2. MySQLで1日より古いタイムスタンプの行を取得する方法

    MySQLで1日より古いタイムスタンプの行を取得する方法MySQLで、1日より古いタイムスタンプで更新された行を取得したい場合は、from_unixtime()関数とnow()関数を組み合わせて使用します。from_unixtime()はUNIXタイムスタンプを日時形式に変換する関数で、now()は現在の日時を返します。これらを組み合わせることで、指定した期間より古いレコードを簡単に抽出できます。それでは、実際にテーブルを作成して動作を確認していきましょう。テーブルの作成まず、サンプルデータを格納するテーブルを作成します。mysql> create table demo75 -&g