1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Id Nummer in Mysql Datenbank zählt falsch

Dieses Thema im Forum "PHP & Co." wurde erstellt von Applefan88, 16.11.06.

  1. Applefan88

    Applefan88 Gast

    Hallo Apfeltalk Gemeinde,
    ich habe mal eine Frage, wenn ich meine Datensätze aus der Datenbank lösche, werden die Ids des Datensatzes mitgelöscht.
    Wenn ich nun einen neuen Datensatz einfüge, zählt er ja von der letzten Nr. weiter und merkt sich ja nicht das der Datensatz gelöscht wurde.

    Nun ist die Struktur von Id mit auto_increment, er zählt immer weiter hoch.

    Jetzt kommt meine Frage (wahrscheinlich sehr leicht zu beantworten ;) ),
    wie kann ich die Datenbank so abändern, dass wenn ein Datensatz gelöscht wird, die Nummer wieder neu vergeben wird?
     
  2. crossinger

    crossinger Doppelter Melonenapfel

    Dabei seit:
    30.07.06
    Beiträge:
    3.369

    Ich würde antworten: "Gar nicht!"

    Eine Id ist eine *interne* Verwaltungsnummer für Datensätze. Üblicherweise sollte sie noch nicht einmal bei der Anzeige des Datensatzes sichtbar sein. Wenn ein Datensatz gelöscht wird ist eine Nummer dann halt "verbrannt". Du hast ja noch Millionen anderer Nummern. Und nur aus ästhetischen Gründen ist einfach zu viel Aufwand für eine so kleine Sache:

    1. Kannst Du sicher sein, dass alle Referenzen auf diese Id auch gelöscht sind? Oder erzeugst Du plötzlich Verknüpfungen zwischen Tabellen, die eigentlich so nicht stimmen?

    2. Du müsstest eine Tabelle mit gelöschten Ids anlegen und vor jeder Neuanlegung eines Datensatzes zuerst dort die niedrigste Nummer nehmen.

    Zusammenfassend (IMHO): Vergiss es! ;) Laß die Datenbank machen, was sie gut kann: Deine Daten verwalten.

    *J*
     
  3. Applefan88

    Applefan88 Gast

    Ich hatte es schon fast befürchtet, aber trotzdem danke.

    Ich hatte innerlich gehofft, es würde eine simple Funktion geben, womit die ID wieder neu aufgebaut wird also von 0 alle Datensätze noch einmal durchzählt.

    Kann man halt nicht ändern.o_O
     
  4. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Wenn Du eine richtiges DBMS benutzt, dann werden Sequenzen benutzt, diese kann man von Hand zurücksetzen. Allerdings kann man das nur machen, wenn man wirklich alle Datensätze mit Nummern größer dem neuen Initialisierungswert der Sequenz entsorgt hat.
     
  5. Hack

    Hack Granny Smith

    Dabei seit:
    17.11.04
    Beiträge:
    16
    Hi,

    gebe meinen Vorrednern natürlich recht. :)

    Aber eine Möglichkeit sehe ich noch: Solltest Du immer ALLE Datensätze aus der Tabelle löschen wollen und dann das 'Hochzählen' bei 1 beginnen lassen wollen. Kannst Du die Tabelle 'leeren' (MySQL-Befehl 'TRUNCATE').

    Aber Achtung: Dabei werden wirklich ALLE Daten aus der jeweiligen Tabelle gelöscht!
     
  6. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Ja, das geht ohne weiteres, wenn Du (das gilt für MySQL) nach der Löschoperation (»DELETE FROM ...«) ein »OPTIMIZE TABLE {tabellename}« ausführst. So werden die freigewordenen IDs wieder verwendet, und es entstehen keine »Blasen« in der Tabellenstruktur.
     
  7. Applefan88

    Applefan88 Gast

    Ah ja, das werde ich doch gleich mal ausprobieren.
    ;)
    Hoffentlich funzt es :-D!
     

Diese Seite empfehlen