MYSQL Auto Inkrement weist Lücken auf

Gast #4488262
Lesenswert?

Hallo :)

ich habe folgendes Problem:

ich habe eine Datenbank bei MySql erstellt und kopiere mit dem INSERT 
INTO Befehl eine Tabelle in eine andere (mit einem Befehl wird die 
gesamte Tabelle kopiert).
Ich kopiere eine Tabelle mit 2 oder mehr Zeilen (auto_increment gesetzt) 
stimmt die ID in der neuen Tabelle. Kopiere ich anschließend allerdings 
noch mal eine Tabelle (Anzahl der Zeilen egal) so wird bei der ID ein 
oder zweite Werte übersprungen.
Kopiere ich immer nur eine Tabelle mit einem Wert passt die ID.

Beispiel:

Tabelle1 mit 2 Zeilen wird in Tabelle2 kopiert.
in Tabelle2 sind nun 2 Zeilen vorhanden mit den IDs 1 und 2
Tabelle3 mit 1 Zeile wird nun in Tabelle2 kopiert
Jetzt ist die ID Reihenfolge: 1, 2, 4


Woran könnte das liegen?
Gast #4488397
Lesenswert?

kannst du zeigen das du genau machst?

Unabhängig davon kann man kaum davon ausgehen, das nie Lücken vorhanden 
sind. Sobald man mit Transaktionen arbeitet und ein Rollback kommt, 
gehen IDs verloren.
Gast #4488475
Lesenswert?

Nach langer suche in englisch-sprachigen Foren bin ich nun zu einer 
Lösung und zu einem Ansatz gekommen der den Fehler erklärt:

Durch das INSERT INTO kommt es bei doppelten Datensätzen (z.B. 2x 
Produkt1) zu einem Fehler beim Insert. Bei einem Fehler wird der 
Autoinkrement dennoch durchgeführt. Ich weiß nicht ob diese Erklärung 
genauso stimmt, allerdings passt Sie perfekt zu meinem Fehlerbild.

Zur Lösung:

Lösung 1: Man soll irgendwie den autoinc lock mode umstellen können. Der 
steht seit Version 5.5 nämlich auf 1. In vorherigen Versionen immer auf 
0. Durch die änderung auf 0 wird kein Autoinkremnt durchgeführt wenn ein 
Fehlerhaftes Insert stattfindet.

Lösung 2: Setzt man vor dem kopieren der Tabelle den Autoinkrementwert 
mit ALTER TABLE AUTO_INCREMENT=1 auf 1 zurück, so wird die nicht auf 1 
gesetzt sondern auf die letzte ID des Primärschlüssels.

Ich habe mich für die Lösung 2 entschieden weil ich nicht wusste wie ich 
Lösung 1 durchführen sollte.

Danke dennoch für die Hilfe. Vielleicht kann meine Lösung jemandem 
helfen.
Falls jemand einen Fehler in meiner Erklärung findet bitte korrigiert 
mich, wie gesagt bin mir nicht ganz sicher.

LG

Steffan
#4488495
Lesenswert?

Wenn das primäre Ziel der AUTO_INCREMENT Spezifikation darin besteht, 
auf einfache und schnelle Art eindeutige IDs zu erzeugen, dann sind 
Lücken tolerierbar.

Ich wäre auch nicht erstaunt, wenn sich der gleiche App-Code bei 
verschiedenen Engines unterschiedlich verhält.

Wenn man Anforderungen hat, die davon nicht einfach erfüllbar sind, dann 
sollte man evtl. einplanen, die IDs anders zu erzeugen. Und nicht auf 
Hacks setzen, die möglicherweise beim nächsten Upgrade platzen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren