MYSQL Auto Inkrement weist Lücken auf

Gast #4488262
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.