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

MySQLで5日より古いレコード(行)をすべて削除する方法

MySQLで5日より古いレコードをすべて削除する方法

MySQLで一定期間より古いデータを一括削除したいケースは、ログ管理や古い投稿のクリーンアップなど、実務でもよくあります。5日より古い行を削除するには、DELETE文とDATEDIFF()関数を組み合わせるのが最もシンプルです。基本の構文は以下のとおりです。

delete from yourTableName
where datediff(now(), yourTableName.yourDateColumnName) > 5;

ポイント: この記事では、現在の日付が「2019-03-10」であると仮定して説明を進めます。DATEDIFF(now(), 日付カラム)は、現在日時と指定カラムの日付の差分(日数)を返す関数で、その値が5より大きいレコード、つまり5日より前のデータだけが削除対象になります。

サンプルテーブルの作成

まずは動作を確認するためにテーブルを作成しましょう。テーブル作成のクエリは以下のとおりです。

mysql> create table deleteRowsOlderThan5Demo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(100),
-> Post_Date date
-> );
Query OK, 0 rows affected (0.69 sec)

Id(自動採番の主キー)、Name(投稿者名)、Post_Date(投稿日)の3カラムを持つシンプルなテーブルです。

テストデータの挿入

次に、INSERT文を使ってテーブルにレコードを追加します。日付の異なる複数のデータを登録します。

mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('Larry','2019-03-11');
Query OK, 1 row affected (0.12 sec)
mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('Mike','2019-02-12');
Query OK, 1 row affected (0.17 sec)
mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('Sam','2019-03-10');
Query OK, 1 row affected (0.12 sec)
mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('Carol','2019-03-01');
Query OK, 1 row affected (0.23 sec)
mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('David','2019-01-31');
Query OK, 1 row affected (0.19 sec)
mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('Maxwell','2019-01-26');
Query OK, 1 row affected (0.10 sec)
mysql> insert into deleteRowsOlderThan5Demo(Name,Post_Date) values('John','2019-02-19');
Query OK, 1 row affected (0.12 sec)

登録データの確認

SELECT文でテーブル内の全レコードを表示してみましょう。

mysql> select *from deleteRowsOlderThan5Demo;

実行結果は以下のとおりです。

+----+---------+------------+
| Id | Name | Post_Date |
+----+---------+------------+
| 1 | Larry | 2019-03-11 |
| 2 | Mike | 2019-02-12 |
| 3 | Sam | 2019-03-10 |
| 4 | Carol | 2019-03-01 |
| 5 | David | 2019-01-31 |
| 6 | Maxwell | 2019-01-26 |
| 7 | John | 2019-02-19 |
+----+---------+------------+
7 rows in set (0.00 sec)

合計7件のレコードが登録されています。

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

それでは、5日より古いレコードをすべて削除するクエリを実行します。

mysql> delete from deleteRowsOlderThan5Demo
-> where datediff(now(), deleteRowsOlderThan5Demo.Post_Date) > 5;
Query OK, 5 rows affected (0.14 sec)

「5 rows affected」と表示されているように、5件のレコードが削除されました。

削除後の確認

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

mysql> select *from deleteRowsOlderThan5Demo;

実行結果は以下のとおりです。

+----+-------+------------+
| Id | Name | Post_Date |
+----+-------+------------+
| 1 | Larry | 2019-03-11 |
| 3 | Sam | 2019-03-10 |
+----+-------+------------+
2 rows in set (0.00 sec)

まとめ

削除後のテーブルには、現在日(2019-03-10)から5日以内に投稿されたLarryとSamのレコードだけが残りました。このように、WHERE datediff(now(), 日付カラム) > 5という条件をDELETE文に指定するだけで、5日より古いデータを簡単に一括削除できます。なお、本番環境で実行する場合は、先にSELECT文で削除対象を確認してからDELETE文を実行するのが安全です。

  1. MySQLで14日前より新しい日付のレコードを取得するクエリの書き方

    この記事では、MySQLを使って「14日前より新しい日付」を持つレコードを抽出する方法を解説します。CURDATE()関数とDATE_SUB()関数を組み合わせることで、簡単に目的のデータを取得できます。テーブル作成から順に見ていきましょう。 1. サンプルテーブルの作成 まず、日付を格納するカラムを持つテーブルを作成します。 mysql> create table DemoTable1392 -> ( -> ArrivalDate date -> ); Query OK, 0 rows affected (0.43 sec) 2. レコード

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

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