de.comp.lang.php.* FAQ

17.12. Wie lege ich den Initialwert des auto_increment fest? Läuft dieser Wert über?

Antwort von Daniel T. Gorski

Üblicherweise benutzt man Werte ohne Vorzeichen (UNSIGNED) für den Typ des auto_increment-Feldes. Ab der MySQL Server-Version 3.23 ist es auch nicht mehr möglich, in diesen Feldern negative Zahlen zu führen.

Geeignete Datentypen für auto_increment wären:

  • TINYINT UNSIGNED - Wertebereich 0 bis 255.

  • SMALLINT UNSIGNED - Wertebereich 0 bis 65535.

  • MEDIUMINT UNSIGNED - Wertebereich 0 bis 16777215.

  • INT UNSIGNED - Wertebereich 0 bis 4294967295.

Für die meisten Anwendungen ist der Datentyp INT UNSIGNED mehr als ausreichend - immerhin ermöglicht dieser eine Adressierung von über vier Milliarden Datensätzen!

Der Initialwert des auto_increment-Feldes ist 1. Um diesen Wert zu ändern, muss man ihn explizit setzen:

mysql> DELETE FROM bar;

mysql> INSERT bar SET INHALT='erster Datensatz';

mysql> SELECT * FROM bar;
+----+------------------+
| ID | INHALT           |
+----+------------------+
|  1 | erster Datensatz |
+----+------------------+

mysql> INSERT bar SET ID='1000', INHALT='zweiter Datensatz';

mysql> SELECT * FROM bar;
+------+-------------------+
| ID   | INHALT            |
+------+-------------------+
|    1 | erster Datensatz  |
| 1000 | zweiter Datensatz |
+------+-------------------+

mysql> INSERT bar SET INHALT='dritter Datensatz';

mysql> SELECT * FROM bar;
+------+-------------------+
| ID   | INHALT            |
+------+-------------------+
|    1 | erster Datensatz  |
| 1000 | zweiter Datensatz |
| 1001 | dritter Datensatz |
+------+-------------------+

Der auto_increment-Wert läuft nicht über - d.h. er wird nicht wieder negativ (bzw. Null bei UNSIGNED), wenn er über seinen Wertebereich hinaus adressiert wird. Stattdessen wird MySQL einen Fehler melden:

mysql> INSERT bar SET ID='4294967295', INHALT='letzter Datensatz';

mysql> SELECT * FROM bar;
+------------+-------------------+
| ID         | INHALT            |
+------------+-------------------+
|          1 | erster Datensatz  |
|       1000 | zweiter Datensatz |
|       1001 | dritter Datensatz |
| 4294967295 | letzter Datensatz |
+------------+-------------------+

mysql> INSERT bar SET INHALT='geht noch einer rein?';
ERROR 1062: Duplicate entry '4294967295' for key 1

Valid HTML 4.01! Valid CSS!

17.12. Wie lege ich den Initialwert des auto_increment fest? Läuft dieser Wert über?
http://www.php-faq.de/q/q-mysql-inkrement.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team