Das Attribut AUTO_INCREMENT
kann zur
Erzeugung einer eindeutigen Kennung für neue Datensätze
verwendet werden:
CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); SELECT * FROM animals;
Das Ergebnis sieht wie folgt aus:
+----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
Sie können den aktuellen AUTO_INCREMENT
-Wert
mit der SQL-Funktion LAST_INSERT_ID()
oder
der C-API-Funktion mysql_insert_id()
abrufen.
Diese Funktionen sind verbindungsspezifisch, d. h., ihre
Rückgabewerte werden nicht durch eine andere Verbindung
beeinträchtigt, die ebenfalls Einfügeoperationen durchführt.
Hinweis: Bei mehrzeiligen
Einfügeoperationen geben LAST_INSERT_ID()
und mysql_insert_id()
den
AUTO_INCREMENT
-Schlüssel des
ersten eingefügten Datensatzes zurück.
Auf diese Weise lassen sich mehrzeilige Einfügeoperationen auch
von anderen Servern in einer Replikationskonfiguration korrekt
nachvollziehen.
Bei MyISAM
- und
BDB
-Tabellen können Sie
AUTO_INCREMENT
in einer Sekundärspalte eines
mehrspaltigen Indexes angeben. In diesem Fall wird der erzeugte
Wert der AUTO_INCREMENT
-Spalte als
MAX(
berechnet. Dies ist praktisch, wenn Sie Daten in sortierte
Gruppen eingeben wollen.
auto_increment_column
) +
1 WHERE prefix=given-prefix
CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ); INSERT INTO animals (grp,name) VALUES ('mammal','dog'),('mammal','cat'), ('Vogel','penguin'),('fish','lax'),('mammal','whale'), ('Vogel','ostrich'); SELECT * FROM animals ORDER BY grp,id;
Das Ergebnis sieht wie folgt aus:
+--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
Beachten Sie, dass in diesem Fall (wenn die
AUTO_INCREMENT
-Spalte Teil eines
mehrspaltigen Index ist) AUTO_INCREMENT
-Werte
neu verwendet werden, wenn Sie den Datensatz mit dem höchsten
AUTO_INCREMENT
-Wert in einer beliebigen
Gruppe löschen. Dies gilt auch für
MyISAM
-Tabellen, bei denen
AUTO_INCREMENT
-Werte normalerweise nicht
wiederverwendet werden.
Wenn die AUTO_INCREMENT
-Spalte Bestandteil
mehrerer Indizes ist, erzeugt MySQL Folgewerte auf der Basis des
Indexes, der mit der AUTO_INCREMENT
-Spalte
beginnt (sofern er vorhanden ist). Wenn also die Tabelle
animals
die Indizes PRIMARY KEY
(grp, id)
und INDEX (id)
enthielte,
würde MySQL den Index PRIMARY KEY
bei der
Erstellung von Folgewerten ignorieren. Das Ergebnis wäre eine
Tabelle, die eine einzelne Folge (und nicht eine Folge pro
grp
-Wert) enthalten würde.
Wenn Sie bei einem anderen
AUTO_INCREMENT
-Wert als 1 beginnen wollen,
können Sie diesen Wert mit CREATE TABLE
oder
ALTER TABLE
wie folgt festlegen:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
Weitere Informationen zu AUTO_INCREMENT
finden Sie hier:
Wie Sie das AUTO_INCREMENT
-Attribut
einer Spalte zuweisen: Abschnitt 13.1.5, „CREATE TABLE
“, und
Abschnitt 13.1.2, „ALTER TABLE
“.
Wie sich AUTO_INCREMENT
je nach
SQL-Modus verhält: Abschnitt 5.2.5, „Der SQL-Modus des Servers“.
Wie man den Datensatz mit dem aktuellsten
AUTO_INCREMENT
-Wert findet:
Abschnitt 12.1.3, „Vergleichsoperatoren“.
Wie man den zu verwendenden
AUTO_INCREMENT
-Wert einstellt:
Abschnitt 13.5.3, „SET
“.
AUTO_INCREMENT
und Replikation:
Abschnitt 6.8, „Replikation: Features und bekannte Probleme“.
Wie die auf AUTO_INCREMENT
bezogenen
Serversystemvariablen
(auto_increment_increment
und
auto_increment_offset
) zur Replikation
verwendet werden können:
Abschnitt 5.2.2, „Server-Systemvariablen“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.