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?
ist in den Quell-Tabellen die Spalte mit dem AI nicht vorhanden?
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.
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
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.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.