Ein UNIQUE-Constraint stellt sicher, dass alle Werte einer Spalte oder Spaltengruppe verschieden sind. Es verhindert Duplikate wie doppelte E-Mail-Adressen oder doppelte Bestellnummern direkt in der Datenbank.

So funktioniert ein UNIQUE-Constraint

CREATE TABLE benutzer (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE
);

Beim Anlegen eines UNIQUE-Constraints erzeugt das Datenbanksystem automatisch einen Index auf die betroffenen Spalten — dadurch bleibt die Eindeutigkeitsprüfung auch bei großen Tabellen schnell. Ein UNIQUE-Constraint kann sich auch über mehrere Spalten erstrecken; dann darf jede Kombination nur einmal vorkommen:

CREATE TABLE buchungen (
    flug_nr INT,
    sitzplatz VARCHAR(4),
    UNIQUE (flug_nr, sitzplatz)
);

UNIQUE und NULL-Werte

Ein UNIQUE-Constraint erlaubt NULL-Werte: In MySQL, MariaDB und PostgreSQL darf ein NULL beliebig oft vorkommen, weil NULL als „unbekannt" gilt und nicht gleich einem anderen NULL ist. Wer das verhindern will, kombiniert UNIQUE mit einem NOT NULL-Constraint. In SQL Server darf dagegen nur ein einziger NULL-Wert pro UNIQUE-Spalte stehen.

Unterschied zu PRIMARY KEY

  • Eine Tabelle darf nur einen Primärschlüssel haben, aber beliebig viele UNIQUE-Constraints.
  • Ein Primärschlüssel ist immer auch eindeutig und zusätzlich NOT NULL; ein UNIQUE-Constraint erlaubt NULL.
  • Ein Primärschlüssel identifiziert jede Zeile eindeutig; UNIQUE sichert einzelne Geschäftswerte wie E-Mail oder Personalnummer ab.

Beides sind Schlüssel des relationalen Modells. Fremdschlüssel können auf UNIQUE-Spalten genauso verweisen wie auf Primärschlüssel — Details dazu im Artikel Primär- und Fremdschlüssel.

Ein UNIQUE-Constraint setzt Bedingungen durch wie ein CHECK-Constraint, nur eben immer nach demselben Muster: Alle Werte müssen verschieden sein.