2016-04-05 7 views
0

表のtable_cacheのは、このようなものです:table_cacheのを切り捨てる動的日時を使用したMySQLイベントスケジューラへの方法

id cache_name  created date 
    1 cache one  2016-03-06 01:20:04 
    2 cache two  2016-03-06 09:40:34 
    3 cache three 2016-03-06 11:40:04 

MySQLのスクリプトは、このようなものです:

CREATE 
EVENT `deleteEvent` 
ON SCHEDULE EVERY 30 MINUTE STARTS '2016-04-06 00:00:00' 
ON COMPLETION NOT PRESERVE 
ENABLE 
DO 
TRUNCATE table_cache; 

それはtable_cacheの毎30分の星2016年4月6日午後12時00分00秒

が切り捨てられます

しかし、それは私が望むものではありません。

id=1, truncate on 2016-03-06 01:50:04 
id=2, truncate on 2016-03-06 10:10:34 
id=3, truncate on 2016-03-06 12:10:04 

それを行うことができるかどうか:私はtable_cacheのに上記の表に基づいて、だから、テーブルのtable_cacheの

からのすべての30分のスターフィールドcreated_dateを、切り捨てしたいですか?

答えて

2

TRUNCATEは、定義によって、テーブルからすべての単一の行を削除する操作です。ここではあなたが望むものではありません。何をしたい

はおそらく、クエリが実行された時点で、30分以上経過したすべてのエントリを削除します

DELETE FROM table_cache 
     WHERE created_date < DATE_SUB(NOW(), INTERVAL 30 MINUTE) 

の線に沿って何かです。

生存期間の正確さに基づいてこのクエリを実行する頻度を決定する必要があります。 (たとえば、30分おきにクエリを実行すると、8:01に作成された行は8:31に削除対象となるため、9:00にクエリが実行されるまでそのまま維持され、実際にはこの問題が問題になるかどうかは、アプリケーションによって異なります。

+0

私の場合は、MySQL Event Schedulerを使用していませんか? –

+0

イベントスケジューラを使用すると、例のように定期的にそのクエリを実行できます。 – duskwuff

+0

したがって、MySQL Event Schedulerはdinamyc datetimeを使用できません。 –

関連する問題