SQL Server UNIQUE Constraint (Deutsch)

Zusammenfassung: In diesem Tutorial lernen Sie, wie Sie die SQL Server UNIQUE-Beschränkung verwenden, um die Eindeutigkeit von Daten in einer Spalte oder einer Gruppe von Spalten sicherzustellen.

Einführung in die SQL Server UNIQUE-Beschränkung

Mit SQL Server UNIQUE-Beschränkungen können Sie sicherstellen, dass die in einer Spalte oder einer Gruppe von Spalten gespeicherten Daten in den Zeilen einer Tabelle eindeutig sind.

Die folgende Anweisung erstellt eine Tabelle, deren Daten in der Spalte email unter den Zeilen der Tabelle hr.persons eindeutig sind:

CREATE SCHEMA hr;GOCREATE TABLE hr.persons( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE);
Code language: SQL (Structured Query Language) (sql)

In dieser Syntax definieren Sie die UNIQUE Beschränkung als Spaltenbeschränkung. Sie können die UNIQUE-Beschränkung auch als Tabellenbeschränkung definieren, etwa so:

CREATE TABLE hr.persons( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), UNIQUE(email));
Code language: SQL (Structured Query Language) (sql)

Hinter den Kulissen erstellt SQL Server automatisch einen UNIQUE-Index, um die Eindeutigkeit der Daten zu erzwingen, die in den Spalten gespeichert sind, die an der UNIQUE-Einschränkung teilnehmen. Wenn Sie daher versuchen, eine doppelte Zeile einzufügen, weist SQL Server die Änderung zurück und gibt eine Fehlermeldung zurück, die besagt, dass die UNIQUE-Beschränkung verletzt wurde.

Die folgende Anweisung fügt eine neue Zeile in die hr.persons Tabelle ein:

INSERT INTO hr.persons(first_name, last_name, email)VALUES('John','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

Die Anweisung funktioniert wie erwartet. Die folgende Anweisung schlägt jedoch aufgrund der doppelten E-Mail fehl:

INSERT INTO hr.persons(first_name, last_name, email)VALUES('Jane','Doe','[email protected]');
Code language: SQL (Structured Query Language) (sql)

SQL Server gibt die folgende Fehlermeldung aus:

Violation of UNIQUE KEY constraint 'UQ__persons__AB6E616417240E4E'. Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is ([email protected]).
Code language: Shell Session (shell)

Wenn Sie keinen separaten Namen für die UNIQUE-Beschränkung angeben, generiert SQL Server automatisch einen Namen für sie. In diesem Beispiel lautet der Name der Einschränkung UQ__persons__AB6E616417240E4E, was nicht ganz lesbar ist.

Um einem UNIQUE Constraint einen bestimmten Namen zuzuweisen, verwenden Sie das CONSTRAINT Schlüsselwort wie folgt:

CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), CONSTRAINT unique_email UNIQUE(email));
Code language: SQL (Structured Query Language) (sql)

Nachfolgend die Vorteile, einem UNIQUE-Constraint einen bestimmten Namen zuzuweisen:

  • Es ist einfacher, die Fehlermeldung zu klassifizieren.
  • Sie können den Namen des Constraints referenzieren, wenn Sie es ändern wollen.

UNIQUE Constraint vs. PRIMARY KEY-Beschränkung

Obwohl beide UNIQUE und PRIMARY KEY Beschränkungen die Eindeutigkeit der Daten erzwingen, Sie sollten die UNIQUE-Beschränkung anstelle der PRIMARY KEY-Beschränkung verwenden, wenn Sie die Eindeutigkeit einer Spalte oder einer Gruppe von Spalten erzwingen wollen, die nicht die Primärschlüsselspalten sind.

Im Unterschied zu PRIMARY KEY-Constraints, erlauben UNIQUE-Constraints NULL. Außerdem behandeln UNIQUE-Constraints das NULL wie einen regulären Wert, daher ist nur ein NULL pro Spalte erlaubt.

Die folgende Anweisung fügt eine Zeile ein, deren Wert in der Spalte emailNULL ist:

INSERT INTO hr.persons(first_name, last_name)VALUES('John','Smith');
Code language: SQL (Structured Query Language) (sql)

Wenn Sie nun versuchen, ein weiteres NULL in die Spalte email einzufügen, erhalten Sie einen Fehler:

INSERT INTO hr.persons(first_name, last_name)VALUES('Lily','Bush');
Code language: SQL (Structured Query Language) (sql)

Hier ist die Ausgabe:

Violation of UNIQUE KEY constraint 'UQ__persons__AB6E616417240E4E'. Cannot insert duplicate key in object 'hr.persons'. The duplicate key value is (<NULL>).
Code language: SQL (Structured Query Language) (sql)

UNIQUE-Beschränkungen für eine Gruppe von Spalten

Um eine UNIQUE-Beschränkung für eine Gruppe von Spalten zu definieren, schreiben Sie sie als Tabellenbeschränkung mit durch Kommas getrennten Spaltennamen wie folgt:

CREATE TABLE table_name ( key_column data_type PRIMARY KEY, column1 data_type, column2 data_type, column3 data_type, ..., UNIQUE (column1,column2));
Code language: SQL (Structured Query Language) (sql)

Das folgende Beispiel erstellt eine UNIQUE-Beschränkung, die aus zwei Spalten person_id und skill_id besteht:

CREATE TABLE hr.person_skills ( id INT IDENTITY PRIMARY KEY, person_id int, skill_id int, updated_at DATETIME, UNIQUE (person_id, skill_id));
Code language: SQL (Structured Query Language) (sql)

Hinzufügen von UNIQUE-Beschränkungen zu vorhandenen Spalten

Wenn Sie eine UNIQUE-Beschränkung zu einer vorhandenen Spalte oder einer Gruppe von Spalten in einer Tabelle hinzufügen, untersucht SQL Server zunächst die vorhandenen Daten in diesen Spalten, um sicherzustellen, dass alle Werte eindeutig sind. Wenn SQL Server doppelte Werte findet, gibt er einen Fehler zurück und fügt die UNIQUE-Beschränkung nicht hinzu.

Das Folgende zeigt die Syntax des Hinzufügens einer UNIQUE-Beschränkung zu einer Tabelle:

ALTER TABLE table_nameADD CONSTRAINT constraint_name UNIQUE(column1, column2,...);
Code language: SQL (Structured Query Language) (sql)

Angenommen, Sie haben die folgende hr.persons-Tabelle:

CREATE TABLE hr.persons ( person_id INT IDENTITY PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255), phone VARCHAR(20),);
Code language: SQL (Structured Query Language) (sql)

Die folgende Anweisung fügt der Spalte email eine UNIQUE-Beschränkung hinzu:

ALTER TABLE hr.personsADD CONSTRAINT unique_email UNIQUE(email);
Code language: SQL (Structured Query Language) (sql)

In ähnlicher Weise fügt die folgende Anweisung eine UNIQUE-Beschränkung zur Telefonspalte hinzu:

ALTER TABLE hr.personsADD CONSTRAINT unique_phone UNIQUE(phone);
Code language: SQL (Structured Query Language) (sql)

Unique-Beschränkungen löschen

Um eine UNIQUE-Beschränkung zu definieren, verwenden Sie die Anweisung ALTER TABLE DROP CONSTRAINT wie folgt:

ALTER TABLE table_nameDROP CONSTRAINT constraint_name;
Code language: SQL (Structured Query Language) (sql)

Die folgende Anweisung entfernt die unique_phone-Beschränkung aus der hr.Personentabelle:

ALTER TABLE hr.personsDROP CONSTRAINT unique_phone;
Code language: SQL (Structured Query Language) (sql)

Ändern von UNIQUE-Beschränkungen

SQL Server hat keine direkte Anweisung, um eine UNIQUE-Beschränkung zu ändern, daher müssen Sie die Beschränkung zuerst löschen und neu erstellen, wenn Sie die Beschränkung ändern möchten.

In diesem Lernprogramm haben Sie gelernt, wie Sie die SQL Server UNIQUE-Beschränkung verwenden, um sicherzustellen, dass die in einer Spalte oder einer Gruppe von Spalten enthaltenen Daten eindeutig sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.