2016-04-05 3 views
0

Tabelle table_cache ist wie folgt:Wie man MySQL Event Scheduler mit dynamischem datetime?

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

Es wird table_cache alle 30 Minuten Sterne 2016.04.06 00.00.00 gestutzt

:

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 Skript table_cache trunkieren wie dies

Aber das ist nicht was ich will. Ich möchte table_cache alle 30 Minuten Sternfeld created_date aus Tabelle table_cache

So, basierend auf der obigen Tabelle gestutzt:

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 

Ob es kann getan werden?

Antwort

2

TRUNCATE ist per Definition eine Operation, die jede einzelne Zeile aus der Tabelle entfernt. Es ist nicht das, was du willst.

Was Sie wollen, ist wahrscheinlich etwas entlang der Linien von

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

, die alle Einträge entfernen, die älter sind als 30 Minuten zum Zeitpunkt der Abfrage ausgeführt wird.

Sie müssen entscheiden, wie oft diese Abfrage basierend darauf ausgeführt wird, wie genau Sie die Lebensdauer benötigen. (Wenn Sie beispielsweise die Abfrage alle halbe Stunde ausführen, wird eine Zeile, die um 8:01 erstellt wird, erst um 8:31 gelöscht. Daher bleibt sie so lange bestehen, bis die Abfrage um 9:00 Uhr ausgeführt wird letzte 59 Minuten statt 30. Ob dies ein Problem ist, hängt von Ihrer Anwendung ab.)

+0

Also, für meinen Fall, es ist nicht mit MySQL Event Scheduler? –

+0

Sie können den Ereignisplaner verwenden, um diese Abfrage in regelmäßigen Abständen wie in Ihrem Beispiel auszuführen. – duskwuff

+0

Also kann der MySQL Event Scheduler nicht dinamyc datetime benutzen? –