MySQL: Autoincrement manipulieren

Haben die Daten einer Tabelle keine Felder, die eine eindeutige Identifizierung erlauben (das ist der so genannte Primary Key), dann diese Identifikation in einem separaten Feld geschehen. Das kann MySQL völlig automatisch erledigen. Dazu geben Sie dem Feld bei der Definition die Extra-Anweisung auto_increment mit.

Der von der Datenbank vergebene ganzzahlige Feldwert wird mit jedem neuen Datensatz hochgezählt. In PHP können Sie diesen Wert nach dem Einfügen eines neuen Datensatzes mit der Funktion mysql_insert_id() abfragen.

Ab und zu ist aber eine bewusste Manipulation des Zählerwertes gewünscht, den MySQL sich intern merkt. Etwa dann, wenn ein bewusst eingebauter Sprung in die IDs, eingebaut werden soll, um alle Datensätze eines neuen Typs bei einem bestimmten Bereich beginnen zu lassen.

Folgendes Kommando setzt beispielsweise den Zähler der Tabelle tab1 auf den Wert 1000

ALTER TABLE tab1 AUTO_INCREMENT=1000

MySQL merkt sich dabei nicht den letzten vergebenen Wert, sondern den nächsten. Nach obiger Zeile würde der nächste eingefügte Datensatz also die Nummer 1000 bekommen.

Mit der Methode kann man nur dann einen niedrigeren Zählerwert als den aktuellen wählen, wenn keine Datensätze mehr mit einer gleichen oder höheren Id existieren. Haben Sie zum Beispiel einen Datensatz eingefügt, der die Nummer 1000 erhalten hat und löschen ihn, würde MySQL dem nächsten Satz die Nummer 1001 geben, also in der Nummerierung eine Lücke hinterlassen. Geben Sie den obigen ALTER-Befehl nochmals, ist wieder die 1000 die nächste Nummer. Ein Setzen auf 999 produziert zwar keinen Fehler, MySQL ignoriert dieses Kommando aber. Denn auch wenn der Datensatz 999 nicht mehr existiert, ergäbe sich beim zweiten INSERT-Kommando eine Kollision mit dem bereits vorhandenen Datensatz 1000.

Ähnliche Beiträge