MySQLデータベースの期限切れエントリを削除しようとしています。作成または更新時に、lastBeatというフィールドがCURRENT_TIMEで更新され、次のクエリを使用して20秒より古い行をチェック/削除します。
DELETE * FROM `rmachines` WHERE
`lastBeat` < (NOW() - 20);
NOW()の代わりにCURRENT_TIMEも試しました
2つのメインループがあります。
rmachinesの行を毎秒更新します
削除クエリを実行します
2が迅速に実行された場合、時間が次の1分(つまり59〜60秒)にロールオーバーすると、期限が切れたかのように行が削除されます(つまり、期限が切れていないとしても!)。それ以外の場合は正常に動作します。
2が1秒間に1回実行される場合、これはそれほど目立たないので、「誤った有効期限」が発生することはめったにありませんが、「問題」を明らかにするために1秒間に5回実行します。
私は解決策を見つけ、テストし、同じシナリオで機能するようです:
しかし、なぜ私の方法が機能しないのか誰かに教えてもらえますか?