Tabelle aufräumen (alte daten löschen)

Hallo,

Ich habe ein kleines Problem mit meiner SQL Datenbank.
Und zwar habe ich in einer Tabelle u.a. die Spalte „t_stamp“. Nun möchte ich ständig alle alten Daten (älter als 6 Monate) automatisch löschen lassen.

Meine Frage: wie mache ich das? bisher habe ich nichts gefunden was mir weiter hilft.
Lg und danke schonmal für die Hilfe
IceDragon

Erstmal: was für eine SQL-Datenbank hast du denn?
Ohne die Info wirds zumindest mit der genauen Syntax schwer.

Ansonsten kannst du ja immer vom aktuellen Datum(Sysdate?Now?) 6 Monate abziehen, und den Wert dann mit dem in der Tabellenspalte vergleichen
Gruß Benjamin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  • In diesem Zusammenhang wäre noch interessant (abgesehen von verwendet System), welche Periodizität für solch eine Löschaktion geplant ist (täglich ? Montlich ?).

Gruss

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Erstmal: was für eine SQL-Datenbank hast du denn?
Ohne die Info wirds zumindest mit der genauen Syntax schwer.

Also die kompletten daten:
MySQL server 5.0.21

und das ist die tabelle um die es geht
CREATE TABLE historylist (
ID int(11) NOT NULL auto_increment,
songID int(11) NOT NULL default ‚0‘,
filename varchar(255) NOT NULL default ‚‘,
date_played datetime NOT NULL default ‚0000-00-00 00:00:00‘,
duration mediumint(9) NOT NULL default ‚0‘,
artist varchar(255) NOT NULL default ‚‘,
title varchar(255) NOT NULL default ‚‘,
album varchar(255) NOT NULL default ‚‘,
albumyear varchar(4) NOT NULL default ‚‘,
website varchar(255) NOT NULL default ‚‘,
buycd varchar(255) NOT NULL default ‚‘,
picture varchar(255) NOT NULL default ‚‘,
listeners mediumint(9) NOT NULL default ‚0‘,
label varchar(100) NOT NULL default ‚‘,
pline varchar(50) NOT NULL default ‚‘,
trackno smallint(6) NOT NULL default ‚0‘,
composer varchar(100) NOT NULL default ‚‘,
ISRC varchar(50) NOT NULL default ‚‘,
catalog varchar(50) NOT NULL default ‚‘,
UPC varchar(50) NOT NULL default ‚‘,
feeagency varchar(20) NOT NULL default ‚‘,
songtype char(1) NOT NULL default ‚‘,
requestID int(11) NOT NULL default ‚0‘,
overlay ENUM( ‚yes‘, ‚no‘ ) DEFAULT ‚no‘ NOT NULL ,
songrights SET( ‚broadcast‘, ‚download‘, ‚on-demand‘, ‚royaltyfree‘ ) DEFAULT ‚broadcast‘ NOT NULL,
PRIMARY KEY (ID),
KEY date_played (date_played)
) TYPE=MyISAM;

bei date_played wird immer das aktuelle datum eingetragen.

Ansonsten kannst du ja immer vom aktuellen Datum(Sysdate?Now?)
6 Monate abziehen, und den Wert dann mit dem in der
Tabellenspalte vergleichen

dann müsste ich ja bei jedem aufruf alle ca. 10000 Einträge mit dem Datum vergleichen.
Habe mir das so gedacht das ich irgendwo bei MySQL einstellen kann das diese tabelle ebenen nicht mehr als 6Monate einträge speichert. Was auch okey wäre wenn ich ihr sagen könnte max 10000 Einträge, kommt dann ein neuer, lösche den ältesten

Lg
IceDragon

Erstmal: was für eine SQL-Datenbank hast du denn?
Ohne die Info wirds zumindest mit der genauen Syntax schwer.

Also die kompletten daten:
MySQL server 5.0.21

Was auch okey wäre wenn ich ihr sagen könnte max

10000 Einträge, kommt dann ein neuer, lösche den ältesten

Lg
IceDragon

  • Das müsstes du dann über einen Trigger bein Insert eines neuen Datensatzes lösen. Als Nachteil wäre zu vermerken, das die Kosten für ein Insert steigen, da jedesmal überprüft werden müsste, ob es etwas zu löschen gibt.

Hi!

Wirklich physikalisch löschen oder nur „auslagern“?

Beides würde ich mittels eines Jobs bzw. Batches machen …

Grüße,
Tomh