19 Stimmen

einen Auftrag zum Löschen von Zeilen, die älter als 3 Monate sind, in einer Mysql-Datenbank

Wir verwenden Mysql-Server als zentrales Protokollierungssystem, und ich möchte einen Auftrag zum Löschen von \clean die Tabelleneinträge, die mehr als 3 Monate alt sind, regelmäßig. Wie lässt sich dies am besten bewerkstelligen?

Vielen Dank im Voraus.

-hinling

80voto

Jeffrey Berthiaume Punkte 4004

Speichern Sie das Datum, an dem ein Artikel erstellt wurde, in einem Feld?

Wenn ja,

DELETE FROM myTable WHERE dateEntered < DATE_SUB(NOW(), INTERVAL 3 MONTH);

sollte funktionieren...

Sie könnten es in einer geplanten Aufgabe/einem Cron-Job ausführen...

4voto

Emil H Punkte 38928

MySQL 5.1 unterstützt Veranstaltungen . Ich habe sie selbst noch nicht verwendet, kann also nicht für sie bürgen. Wenn Sie jedoch nur regelmäßig eine DELETE-Anweisung ausführen wollen, denke ich, dass sie gut genug funktionieren.

2voto

E.J. Brennan Punkte 43746

Eine einfache Möglichkeit wäre, einen Job zu planen, der jede Nacht läuft und eine gespeicherte Prozedur aufruft, um alle Zeilen zu löschen, die älter als drei Monate sind. Abhängig von Ihrem Betriebssystem sollte dies einfach zu bewerkstelligen sein. Wenn Sie dies jede Nacht tun, wird die Menge der gelöschten Daten nicht so groß sein wie bei einer Löschung pro Monat oder so.

Ich habe auch in der Vergangenheit, hatte Code in meinem SP, die Daten eingefügt, um die Löschungen von nicht benötigten Daten zu diesem Zeitpunkt zu tun, so dass im Grunde jedes Mal, wenn eine Zeile eingefügt wird, direkt nach der Einfügung in lief ein "cleanup" proc, die ein bisschen Wartung. Das wäre nicht meine erste Wahl, aber es ist machbar, wenn die Anzahl der Einfügevorgänge gering ist und die Löschvorgänge schnell durchgeführt werden können (man will ja den Benutzer nicht ausbremsen). Ein schöner Nebeneffekt ist, dass die Daten immer sauber (d.h. alle Daten sind immer <= 3 Monate alt), aber ich bin nicht sicher, ob das für Ihre Anwendung von Bedeutung ist.

Sie sollten auch in Erwägung ziehen, die Zeilen nicht nur zu löschen, sondern in einer anderen Tabelle zu archivieren, wenn es eine jede Es besteht die Möglichkeit, dass Sie die Daten eines Tages für einen anderen Zweck benötigen. I immer Wenn Sie dies tun, werden Sie überrascht sein, wie heldenhaft Sie sein können, wenn ein Manager, der nicht einmal weiß, dass Sie die Daten speichern, plötzlich einen dringenden Bedarf daran hat.... und Sie ihm diesen erfüllen können.

-1voto

tpdi Punkte 33618

Um Ihre Frage zu paraphrasieren: "Ich habe Code, der nicht vom Client abhängt, den ich mehrmals in der Datenbank ausführen möchte und dessen Ausgabe ich nicht sehen muss", dann lautet die Antwort: "Schreiben Sie eine gespeicherte Prozedur und rufen Sie sie regelmäßig von einem beliebigen Client aus auf".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X