• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

Id Nummer in Mysql Datenbank zählt falsch

  • Ersteller Applefan88
  • Erstellt am

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?
 

crossinger

Doppelter Melonenapfel
Registriert
30.07.06
Beiträge
3.369
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?


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*
 

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
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
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.
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.
 

Hack

Granny Smith
Registriert
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!
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
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?

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.
 

Applefan88

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