UNIQUE
Constraints & Struktur
Der Constraint UNIQUE sorgt dafür, dass alle Werte in einer Spalte verschieden sind. Kein Wert darf doppelt vorkommen. Das eignet sich z. B. für E-Mail-Adressen, Steuernummern oder Benutzernamen.
Syntax beim Anlegen
CREATE TABLE Kunden ( KundenID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Email VARCHAR(120) UNIQUE, Stadt VARCHAR(50) );
Jetzt kann keine E-Mail-Adresse zweimal eingetragen werden.
Was passiert bei Verstoß?
INSERT INTO Kunden VALUES (1, 'Müller GmbH', 'info@mueller.de', 'Berlin'); INSERT INTO Kunden VALUES (2, 'Müller KG', 'info@mueller.de', 'Köln'); -- Fehler: doppelter Wert für UNIQUE-Spalte 'Email'
UNIQUE über mehrere Spalten
Du kannst auch eine Kombination von Spalten eindeutig machen. Dann darf das Paar nicht doppelt vorkommen:
CREATE TABLE Kunden ( KundenID INT PRIMARY KEY, Name VARCHAR(100), Stadt VARCHAR(50), CONSTRAINT uq_name_stadt UNIQUE (Name, Stadt) );
UNIQUE vs PRIMARY KEY
Beide erzwingen Eindeutigkeit. Unterschiede:
- Eine Tabelle hat nur einen
PRIMARY KEY, aber beliebig vieleUNIQUE-Constraints. UNIQUEerlaubt (je nach System) einen oder mehrereNULL-Werte,PRIMARY KEYnicht.
Stolperfalle
Der Umgang mit NULL ist hier knifflig: In den meisten Systemen gilt NULL nicht als „gleich“ zu einem anderen NULL, sodass mehrere Zeilen mit NULL in einer UNIQUE-Spalte erlaubt sein können. SQL Server lässt dagegen nur ein einziges NULL zu. Prüfe das Verhalten deines Dialekts, wenn die Spalte NULL erlauben soll.