MySQL: Verhalten bei erreichen des maximalen auto_increment

Hi HaBo-Com,
folgendes vorneweg.
Ich richte bei MySQL-Tabellen immer auch ein id-Feld mit auto_increment ein. Diesen Feldern gebe ich den Daten-Typ bigint(20)
Bei dieser Einstellung hat ein Feld folgende Maximal-Werte:
Auf 64Bit-Systemen: 18.446.744.073.709.551.615
Auf 32Bit-Systemen: 9.223.372.036.854.775.807


Nun meine Frage.
Wie verhält sich das MySQL-DBMS bei erreichen bzw. überschreiten des maximalen Wertes des auto_increments-Feldes.
Werden niedriegere freie Werte neu belegt, oder verweigert das DBMS dann das abspeichern?


Ich kenne mich in der Informatik nicht gut genug aus, um mir die Quelltexte von MySQL runterzuladen und nach der Stelle zu suchen wo das dann passiert.



Kai aka Knight1
 
Wie verhält sich das MySQL-DBMS bei erreichen bzw. überschreiten des maximalen Wertes des auto_increments-Feldes.

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html hat gesagt.:
Use a large enough integer data type for the AUTO_INCREMENT column to hold the maximum sequence value you will need. When the column reaches the upper limit of the data type, the next attempt to generate a sequence number fails.

HTH

Micha
 
Hätte natürlich im Manual nach Tipps schauen können. Dachte aber nicht dran.

Mit dem "use large enough integer data type..." werde ich nicht weiter kommen da bigint(20) bereits das maximum zu sein scheint.

Aber ich weiß jetzt dass das DBMS das speichern verweigert. Und darum gings mir ja.

Selbst der Wertebereich bis 9.223.372.036.854.775.807 auf 32Bit-Systemen reicht bei mir für meine Projekte fürs erste aus. Ist aber gut zu Wissen, falls es doch mal dazu kommen sollte.


Kai aka Knight1
 
Bei einer Datengröße von 20 Byte wären das doch zurückgerechnet in Terrabyte:

20 * 10000000000000000000 / 1024 / 1024 / 1024

Da komm ich auf 186.264.514.923 Terrabyte... nur für diesen Increment-Wert!

Machst du dir da wirklich Gedanken drum?

Nachtrag: ich weiß nun wohl nicht, ob auch bei kleineren Werten die ganzen 20 Byte im Feld belegt werden.
 
Zuletzt bearbeitet:
...
Machst du dir da wirklich Gedanken drum?

Um den Speicherbedarf in diesem speziellen Fall nicht wirklich, wobei ich schon einen Grund hätte mir Gedanken zu machen. Meine Projekte liegen alle bei 1und1, und dort ist die Größe einer Datenbank begrenzt (Je nach Paket entweder auf 100MB oder 1GB).
Habe ja geschrieben dass es bei meinen aktuellen Projekten, so wie es momentan aussieht, nicht dazu kommt das der Maximal-Wert erreicht wird.

Mir ging's ja um das Verhalten des DBMS bei erreichen des Maximal-Wertes. Und das weiß ich ja jetzt.

Ich habe extra bigint(20) gewählt, um genug Reserven zu haben.


Kai aka Knight1
 
eine viel interessantere frage wäre, wie lange es dauert bis so ein wert seinen überlauf erreicht ... das sind immerhin mindestens 63 bits ...

um jeder sekunde eines jahres eine eindeutige zahl zuzuweisen braucht man etwas weniger als 25 bit je eintrag ... jedes weitere bit bedeutet eine verdoppelung des zahlenraumes ... sprich wenn wir sekunden zählen wollten wäre der zahlenraum groß genug für 274.877.906.944 Jahre ...

reserve: vorhanden :D
 
...
reserve: vorhanden :D

Deswegen hatte ich mich ja damals für diese Daten-Typ "konfiguration" entschieden. Es ist eher unwahrscheinlich dass eine der Tabellen in meinen Projekten in das Maximum laufen wird. :wink:

Aber wie ich schon geschrieben habe, ging es mir rein um die generelle Info wie sich das DBMS bei einem Überlauf verhält. Die Info welchen Daten-Typ ich nutze habe ich nur angegeben um solche Kommentare zu vermeiden wie zum Beispiel "Wenn es nicht reicht, dann wähle doch einen größeren Wertebereich.", oder ähnliches.


Kai aka Knight1
 
Zurück
Oben