技術ブログ

プログラミング、IT関連の記事中心

テーブルの1日前のデータを自動で削除する方法【MySQL】

■はじめに

テーブルに登録しているデータで「TIMESTAMP」を使用することがあります。
この「TIMESTAMP」のデータを使用して、1日前のデータは削除するなど、一定期間で削除する方法を記載します。
もちろん手動でSQLを流してもいいですが、手間なので、今回は自動で削除する方法を記載します。

■手順

まずは、以下で、24時間前以前のデータを取得することができます。

SELECT * FROM [DB名].[テーブル名] WHERE TIMESTAMPDIFF(HOUR, [TIMESTAMPのカラム名], CURRENT_TIMESTAMP()) > 24

上記をちょっと解説すると、「TIMESTAMPDIFF」というSQLの関数を利用して時間の差分を出しています。
第一引数に「HOUR」とすることで、時間の差分になります。
※ちなみに、「MINUTE」なら分、「SECOND」なら秒です。

では、上記を元に、今度は削除のSQLを以下に記載します。

DELETE FROM [DB名].[テーブル名] WHERE TIMESTAMPDIFF(HOUR, [TIMESTAMPのカラム名], CURRENT_TIMESTAMP()) > 24

これで、削除のSQLは完成です。
ただ、今回は自動で削除したいので、cronを使用します。

以下のコマンドでcronの編集モードにします。

crontab -e

編集モードになったら、以下を記載します。

0 0 * * * mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [DB名].[テーブル名] WHERE TIMESTAMPDIFF(HOUR, [TIMESTAMPのカラム名], CURRENT_TIMESTAMP()) > 24" > /var/log/mysql-[DB名]-[カラム名]-delete.log 2>&1

上記は、毎日0時にDELETE文を実行するcronです。
実行されたら、以下にログが出力されるので、確認してみてください。

/var/log/mysql-[DB名]-[カラム名]-delete.log