2012-04-06 7 views
4

Ich habe eine MySQL-Tabelle mit etwa 2.000.000 Einträge, mit einem Primärschlüssel, der automatisch inkrementiert. An einem Punkt sprang der Autoinkrementwert plötzlich von dem, was er war (etwa 2.000.000), zu dem maximalen ganzzahligen Wert (2.147.483.647). Unnötig zu sagen, dass alle nachfolgenden Einfügungen in diese Tabelle fehlgeschlagen sind. Als ich es bemerkte, änderte ich den Primärschlüsseltyp von int in bigint und so funktioniert es jetzt gut.MySQL Auto Inkrement ID sprang plötzlich auf MAXINT, was könnte ein Grund sein?

Also meine Frage ist, warum konnte das passiert sein? Und gibt es irgendwelche Vorkehrungen, die ich ergreifen könnte, um dies in der Zukunft zu vermeiden?

+2

Verwenden Sie 'unsigned' auch, ich bezweifle, dass Sie negative auto_increments benötigen. –

Antwort

6

Ein fehlgeschlagener Einfügevorgang kann die Spalte für die automatische Erhöhung immer noch vergrößern. Wenn Ihr Programm in eine Endlosschleife von Fehlern ging, konnte das Limit erreicht werden.

Es ist auch möglich, die automatische Inkrementierung programmgesteuert auf einen bestimmten Wert zu setzen.

ALTER TABLE yourtable AUTO_INCREMENT = 12345; 
0

Ein Grund hierfür könnte

BE- Wenn Sie Zufallszahl in der Spalte der Autoinkrement eingegeben, dann könnte es sein, weil auto_increment nur in aufsteigender Reihenfolge funktioniert. Also, als Sie die Nummer, die in der Nähe der maximalen Grenze ist, eingefügt haben, dann hat es bald die maximale Grenze erreicht und Sie konnten nichts anderes eingeben.

+0

Das ergibt keinen Sinn. Sie sagen, dass, weil das automatische Inkrement immer größer wird, es nach dem Einfügen einer Zufallszahl zuletzt war. Wenn Sie das sagen, ist das nicht korrekt. –

+0

@DMac Entschuldigung, dass ich ein paar Worte rutschte und Sie meine Antwort missverstanden haben, lesen Sie es noch einmal. –

+0

@DMac - obwohl er es ein wenig ungeschickt erklärt hat, hat er Recht, aber die Antwort ist höchstwahrscheinlich, dass es fehlgeschlagene Einfügungen gab und sie die Zahlen, die "auto_increment" erzeugt, verbraucht haben. Upvoting gegen diesen Downvote, da die Antwort an sich nicht schlecht ist. –

Verwandte Themen