7.3.5 Domain Integrität – UNIQUE
Ein weiteres Constraint ist das UNIQUE
-Constraint (englisch: einmalig).
Dadurch wird sichergestellt, dass sich Werte in bestimmten Spalten bzw. Spaltenkombinationen
von allen anderen Zeilen der Tabelle eindeutig unterscheiden. Allerdings sind in Abweichung zur
Forderung nach Eindeutigkeit auch NULL
-Werte erlaubt.
Bevor wir uns ein Beispiel ansehen, schauen wir uns die allgemeine Syntax an. Sie ist dem der Primär- bzw. Fremdschlüsselschreibweise sehr ähnlich:
CREATE TABLE tabellenName ( Spalte_1 Datentyp NOT NULL, Spalte_2 Datentyp, ..., CONSTRAINT uniqueName UNIQUE (Spalte_2) )
Hier in dieser allgemeinen Schreibweise ist das UNIQUE
als
Tabellen-Constraint aufgeschrieben.
Das UNIQUE
kann aber auch als Spalten-Constraint geschrieben werden
(siehe Beispiel zwei). An Hand der Ortstabelle wollen wir uns diese Einschränkung
der Tabelle einmal ansehen, auch wenn es keinen Sinn macht einen Ort derart
einzugrenzen, weil es Orte gibt, die verschiedene Postleitzahlen besitzen.
Hier nun die Ortstabelle als Beispiel zum besseren Verständnis:
CREATE TABLE ort ( plz CHAR(5) NOT NULL DEFAULT '00000', ort VARCHAR (50) NOT NULL, vorwahl VARCHAR (12) NULL DEFAULT '000', CONSTRAINT primaryKey_ort PRIMARY KEY (plz), CONSTRAINT unique_ort UNIQUE (ort) ) ENGINE=INNODB
oder in Spaltenschreibweise …
CREATE TABLE ort ( plz CHAR(5) NOT NULL DEFAULT '00000', ort VARCHAR (50) NOT NULL UNIQUE, vorwahl VARCHAR (12) NULL DEFAULT '000', CONSTRAINT primaryKey_ort PRIMARY KEY (plz) ) ENGINE=INNODB
Sollte sich ein Constraint auf mehr als eine Spalte beziehen, dann muss es als Tabellen-Constraint geschrieben wobei die Spalten durch Komma getrennt aufgelistet werden:
CREATE TABLE ort ( ... CONSTRAINT unique_ort UNIQUE (ort, vorwahl) )
Generell ist die Eindeutigkeit (UNIQUE
) verletzt, wenn es
(mindestens) zwei Zeilen in der Tabelle gibt, in denen die Werte der
einander entsprechenden Spalten gleich sind.