Das Schlüsselwort »AUTO_INCREMENT« in MySQL
Wenn eine Primärschlüsselspalte mit »AUTO_INCREMENT« gekennzeichnet wird, dann muß beim Anlegen einer Zeile kein Wert für diese Spalte festgelegt werden. Das Datenbanksystem legt für diese Spalte beim Hinzufügen einer neuen Zeile dann automatisch einen Wert fest, der durch automatisches Hochzählen („automatisches Inkrementieren“) eines Zählers ermittelt wird.
- Konsole
DROP SCHEMA IF EXISTS S; CREATE SCHEMA S; USE S;
CREATE TABLE MITGLIED
( MITGLIEDSNUMMER INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR( 255 ) );Query OK, 0 rows affected
SELECT * FROM MITGLIED;
Empty set
INSERT INTO MITGLIED( NAME )VALUES( 'Altiene Arndt' );
Query OK, 1 row affected
SELECT * FROM MITGLIED;
+-----------------+---------------+
| MITGLIEDSNUMMER | NAME |
+-----------------+---------------+
| 1 | Altiene Arndt |
+-----------------+---------------+1 row in set
INSERT INTO MITGLIED( NAME )VALUES( 'Elke Hilbers' );
Query OK, 1 row affected (0.04 sec)
SELECT * FROM MITGLIED;
+-----------------+---------------+
| MITGLIEDSNUMMER | NAME |
+-----------------+---------------+
| 1 | Altiene Arndt |
| 2 | Elke Hilbers |
+-----------------+---------------+2 rows in set
Auch bei Verwendung von »AUTO_INCREMENT« ist es möglich, die Primärschlüsseleigenschaft am Ende der Spaltenfestlegungen durch ein Komma abgetrennt festzulegen, beispielsweise als »PRIMARY KEY( THETA )«.
- Konsole
CREATE TABLE THETA
( THETA INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY( THETA ));Query OK, 0 rows affected
Persistierung des Zählerstandes
MySQL-Versionen vor 8.0 speicherten den Zählerstand nicht dauerhaft und stellten ihn dann nach einem Neustart aus dem Maximum der Spalte wieder her.
Lücken im KNP
Durch Operationen auf einer Tabelle, wie etwa dem Löschen von Zeilen, können Lücken bei den Werten einer Primärschlüsselspalte entstehen, etwa derart, daß der Werte »1« und der Wert »3« vorkommen, aber der dazwischenliegende Wert »2« nicht (mehr).
Solche Lücken sind bei der Numerierung in einem Schlüssel erlaubt. Es sollte nicht versucht werden, die Lücken aufzufüllen oder die Tabelle neu zu numerieren, um eine Numerierung ohne Lücken zu erhalten, da beides nur Aufwand verursacht und Schaden anrichten kann, ohne etwas zu verbessern.
- Drei unterschiedliche Zeilen mit einer Lücke (der Wert »2« fehlt)
1
--------------------------------
3
--------------------------------
4