Kommen wir mal zu einem komischen Verhalten das ich mir lange nicht erklären konnte. da wir Webseiten schaffen, nutzen wir für Datenspeicherung, wie viele andere auch, mySql. Ob das nun gut oder schlecht ist, darüber kann man lange streiten, tut hier aber nichts zur Sache.
Damit das Problem ersichtlich wird, hier mal ein kurzer Anriss unseres Szenarios. Wir sammeln ein paar Statistikdaten in der Datenbank, damit wir hier nicht zuviel Müll ansammeln, werden automatisiert alte Daten entfernt (per DELETE). Als Datenbank-Layer verwenden wir PDO mit einigen eigenen Erweitereungen für Debugging und Caching.
Nun zum eigentlichen Problem, Wir hatten auf einmal keine Aktuellen Statistikdaten mehr. Die Daten waren älter und wir haben keine neuen erhalten. Klingt erstmal noch Platte voll oder sowas, also Platte und Tabellen gechecked. Alles in Ordnung. Tabelle hatte nur noch ca. 1Mio Einträge (alte Einträge werden ja gelöscht).
Statistikscript erneut angeschrieben mit pdo->errorinfo() ausgabe. Und siehe da... kein Fehler, angeblich hat alles funktioniert :(
Als nächstes dann mal versucht einen Eintrag manuell in der Datenbank anzulegen. Und endlich, hier ein Fehler: Duplicated Key. ... Moment mal habe ich mir gedacht, wie geht das den, der Primary Key ist doch autoincrement. Tja, aber nur als INT definiert gewesen. Wir hatten mittlerweile über 2147483647 Einträge in der Tabelle gehabt und wieder gelöscht. Dadurch hat das autoincrement immer den größt-möglichen Wert angenommen und damit einen Duplicate Key Fehler ausgelöst.
Um diesen Fehler jetzt zu beheben und vorzubeugen, habe ich unser Aufräum-Script ein wenig geändert. Statt alte Datensätze zu löschen, fügen wir nun die aktuellen Daten, die wir weiter verwenden wollen in eine neue Tabelle ein mit neuem Autoicrement-Wert. Dadurch wird der Zähler nach jedem Aufräumen quasi resettet und wir laufen nicht nochmal in das Problem.