IDENTITY ist die Standard-Lösung relationaler Datenbanken für automatisch erzeugte Spaltenwerte: SQL Server, PostgreSQL und Oracle füllen eine als IDENTITY deklarierte Spalte selbstständig mit aufsteigenden Nummern. Sie ist das Gegenstück zu AUTO_INCREMENT in MySQL und MariaDB.

So deklarieren Sie eine IDENTITY-Spalte

In SQL Server legt das Schlüsselwort IDENTITY(Startwert, Schrittweite) die Folge fest:

CREATE TABLE kunden (
    id INT IDENTITY(1,1) PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

PostgreSQL (seit Version 10) und Oracle (seit 12c) folgen dem SQL-Standard mit GENERATED ... AS IDENTITY:

CREATE TABLE kunden (
    id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

Bei GENERATED ALWAYS verweigert die Datenbank einen selbst mitgegebenen Wert; bei GENERATED BY DEFAULT ist ein manueller Wert erlaubt. PostgreSQL setzt intern eine unsichtbare SEQUENCE ein.

Werte auslesen und manuell einfügen

In SQL Server liefert SCOPE_IDENTITY() die zuletzt vergebene ID der aktuellen Anweisung – anders als @@IDENTITY auch dann korrekt, wenn ein Trigger zwischendurch eine weitere ID erzeugt hat. Mit SET IDENTITY_INSERT kunden ON lassen sich Werte gezielt vorgeben, danach muss der Schalter wieder ausgeschaltet werden.

Lücken und Besonderheiten

Wie bei AUTO_INCREMENT sind Lücken normal: Rollbacks und gelöschte Zeilen hinterlassen freie Nummern, eine Garantie auf Lückenlosigkeit gibt es nicht. Pro Tabelle ist nur eine IDENTITY-Spalte erlaubt, und ihr Wert wird durch UPDATE nicht verändert.

Abgrenzung zu den Alternativen

Während IDENTITY fest an eine Tabelle gebunden ist, existiert eine SEQUENCE als eigenständiges Objekt und kann mehrere Tabellen versorgen. MySQL und MariaDB nutzen stattdessen AUTO_INCREMENT.

Verwandte Grundlagen: CREATE TABLE, Primär- und Fremdschlüssel, INSERT, SQL-Grundlagen.