Tanjia: Nach DELETE kein Eintrag mit ID 1

Hallo, ich habe mir eine kleine Newsseite erstellt.
Die News werden in mysql-DB gespeichert (ID primary key auto_increment).
Jede hat eine ID. In der Eingabemaske habe ich ID weggelassen.
Wenn ich jetzt aber bspweise die mit ID 1 lösche, dann wird die nächste nicht automatisch mit der ID 1 gespeichert, sondern mit 2.
Wenn ich die lösche, wird die nächste trotzdem mit 3 gespeichert.

Wieso?
Ich hab gehört, dass es auch anders geht. Was hab ich falsch gemacht?
..."Delete from ... where ID='$id'";

Danke für Hilfe.

Tanjia

  1. Hi,
    Seit MySQL 3.23 wird ein gelöschter Auto-Increment-Wert nicht nochmal verwendet. Das beschriebene Verhalten ist also korrekt.
    MfG
    Moldawian

  2. Moin

    Also im manual steht, dass der neue Wert eines auto_increment-Feldes immer dem größten Wert der gesamten Spalte+1 entspricht. Wenn du jetzt also die Nachrichten 1,2,3 hast und die 1 löscht, dann bekommt eine neue Nachricht die Nummer 4 (das gilt auch, wenn du die 2 löscht). Ich kann mich jetzt erinnern beim Löschen der 3 zwei Verhaltensweisen erlebt zu haben (weiss leider nicht mehr mit welcher Version was passiert war):
    1. Der neue Datensatz bekommt die Nummer 4
    2. Der neue Datensatz bekommt die Nummer 3 (so wie es im Handbuch steht).

    IIRC war aber in beiden Fällen eine Sache gleich: Wenn du alle Datensätze löscht (DELETE FROM table), fängt die Nummerierung wieder bei 1 an.

    --
    Henryk Plötz
    Grüße von der Ostsee

  3. Hallo,

    Microsoft Access zeigt das gleiche Verhalten. Dort würde er die kleinsmöglich ID erst wieder verwenden, nachdem die Datenbank reorganisiert wurde.

    m.

  4. Sup!

    Eherne Prinzipien der Datenbank-Konzeption und -Programmierung besagen, daß ein Primärschlüssel NIEMALS neu vergeben werden darf.
    Es könnte ja sonst evtl. zu Inkonsistenzen kommen, wenn nicht alle Referenzen bei jeder Transaktion auf Gültigkeit geprüft werden, daß heisst, wenn nicht die Struktur der Datenbank absolut perfekt und die referentielle Integrität durch Fremdschlüssel-Beziehungen und jede Menge Checks und Constraints 100%ig garantiert ist.
    Z.B. könnte ja ein externes Programm per Primärschlüssel auf Datensätze zugreifen. Ein Datensatz wird gelöscht, ein neuer geschrieben - und hat die gleiche ID wie der alte. Das externe Programm weiss davon nichts - beim nächsten Start wird das externe Programm nach irgendetwas gefragt. Es guckt in der Datenbank nach dem Datensatz, der die Informationen enthält. Und es gibt den Datensatz mit der gesuchten ID - das Programm liest die Daten aus und antwortet auf die Anfrage. Aber natürlich gibt es totalen Unsinn aus, weil der Datensatz, der jetzt die gesuchte ID hat, überhaupt nichts mit dem alten Datensatz zu tun hat.
    Vielleicht verwaltet das externe Programm alle Artikel eines Shops, die reduziert sind - plötzlich ist also angeblich ein ganz anderer Artikel reduziert, der wirklich reduzierte Artikel war ausverkauft und darum aus der Datenbank genommen worden, daß externe Programm hätte unter der ID dieses Artikels nichts finden dürfen.

    Ich hoffe, daß hat geholfen zu verstehen, warum IDs wirklich besser nur einmal verwendet werden sollten.

    Gruesse,

    Bio