CONSTRAINT-Klausel

Eine Einschränkung hat Ähnlichkeit mit einem Index, obwohl sie ebenfalls zum Herstellen einer Beziehung mit einer anderen Tabelle verwendet werden kann.

Sie verwenden die CONSTRAINT-Klausel in ALTER TABLE- und CREATE TABLE-Anweisungen, um Einschränkungen zu erstellen oder zu löschen. Es gibt zwei Arten von CONSTRAINT-Klauseln: eine zum Erstellen einer Einschränkung für ein einzelnes Feld und eine zum Erstellen einer Einschränkung für mehrere Felder.

Hinweis : Bei Nicht-Microsoft Access-Datenbanken wird die Verwendung von CONSTRAINT oder einer der DDL-Anweisungen (Data Definition Language) vom Microsoft Access-Datenbankmodul nicht unterstützt. Verwenden Sie stattdessen die DAO Create-Methoden.

Syntax

Einschränkung für ein einzelnes Feld:

CONSTRAINT-Name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES Fremdtabelle [(Fremdfeld1, Fremdfeld2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Einschränkung für mehrere Felder:

CONSTRAINT-Name
{PRIMARY KEY (Primärschlüssel1[, Primärschlüssel2 [, ...]]) |
UNIQUE (EindeutigesFeld1[, EindeutigesFeld2 [, ...]]) |
NOT NULL (NichtNULLFeld1[, NichtNULLFeld2 [, ...]]) |
FOREIGN KEY [NO INDEX] (Bezug1[, Bezug2 [, ...]]) REFERENCES Fremdtabelle [(Fremdfeld1 [, Fremdfeld2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Die CONSTRAINT-Klausel besteht aus diesen Teilen:

Teil

Beschreibung

Name

Der Name der Einschränkung, die erstellt werden soll.

Primärschlüssel1, Primärschlüssel2

Der Name des Felds oder der Felder, die als Primärschlüssel festgelegt werden.

EindeutigesFeld1, EindeutigesFeld2

Der Name des Felds oder der Felder, die als Eindeutiger Schlüssel festgelegt werden.

NichtNULLFeld1, NichtNULLFeld2

Der Name des Felds/der Felder, die auf NULL ausschließende Werte eingeschränkt sind.

Bezug1, Bezug2

Der Name eines Fremdschlüsselfelds/-feldern, die auf Felder in einer anderen Tabelle verweisen.

Fremdtabelle

Der Name der Fremdtabelle, die die von Fremdfeld angegebenen Felder enthält.

Fremdfeld1, Fremdfeld2

Der Name des Felds oder der Felder in Fremdtabelle, das bzw. die durch Bezug1, Bezug2 angegeben wird/werden. Sie können diese Klausel fortlassen, wenn das Feld, auf das verwiesen wird, den Primärschlüssel der Fremdtabelle darstellt.


Hinweise

Sie können die Syntax für die Einschränkung für ein einzelnes Feld in der Felddefinitionsklausel einer ALTER TABLE- oder CREATE TABLE-Anweisung unmittelbar im Anschluss an die Angabe des Datentyps des Felds verwenden.

Sie verwenden die Syntax für eine Einschränkung für mehrere Felder immer, wenn Sie das Reserviertes Wort CONSTRAINT außerhalb einer Felddefinitionsklausel in einer ALTER TABLE- oder CREATE TABLE-Anweisung verwenden.

Mithilfe von CONSTRAINT können Sie ein Feld als eine der folgenden Arten von Einschränkungen bestimmen:

  • Sie können das reservierte Wort UNIQUE verwenden, um ein Feld als eindeutigen Schlüssel zu bestimmen. Dies bedeutet, dass keine zwei Datensätze in der Tabelle in diesem Feld den gleichen Wert aufweisen können. Sie können ein beliebiges Feld oder eine beliebige Feldliste als eindeutig bestimmen. Wenn eine mehrere Felder umfassende Einschränkung als eindeutiger Schlüssel bestimmt wird, müssen die kombinierten Werte aller Felder im Index eindeutig sein, selbst wenn zwei oder mehr Datensätze in auch nur einem der Felder den gleichen Wert aufweisen.

  • Sie können die reservierten Wörter PRIMARY KEY verwenden, um ein Feld oder eine Menge von Feldern in einer Tabelle als Primärschlüssel festzulegen. Alle Werte im Primärschlüssel müssen eindeutig und dürfen nicht NULL sein, und es kann nur einen Primärschlüssel für eine Tabelle geben.

    Hinweis : Legen Sie keine Einschränkung PRIMARY KEY für eine Tabelle fest, die bereits einen Primärschlüssel aufweist; andernfalls tritt ein Fehler auf.

  • Sie können die reservierten Wörter FOREIGN KEY verwenden, um ein Feld als Fremdschlüssel festzulegen. Wenn der Primärschlüssel der Fremdtabelle aus mehreren Feldern besteht, müssen Sie eine Einschränkungsdefinition für mehrere Felder verwenden, die alle verweisenden Felder, den Namen der Fremdtabelle und die Namen der Felder in der Fremdtabelle, auf die verwiesen wird, in der gleichen Reihenfolge wie die verweisenden Felder enthält. Wenn es sich bei dem Feld oder den Feldern, auf die verweisen wird, um den Primärschlüssel der Fremdtabelle handelt, brauchen Sie die Felder, auf die verwiesen wird, nicht anzugeben. Standardmäßig verhält sich das Datenbankmodul so, dass es den Primärschlüssel der Fremdtabelle als das Feld ansieht, auf das verwiesen wird.

    Fremdschlüsseleinschränkungen definieren spezifische Aktionen, die ausgeführt werden sollen, wenn sich ein entsprechender Primärschlüsselwert ändert:

  • Sie können Aktionen angeben, die für die Fremdtabelle ausgeführt werden sollen. Die Grundlage bildet eine entsprechende Aktion, die für den Primärschlüssel in der Tabelle ausgeführt wird, in der die CONSTRAINT-Einschränkung definiert ist. Als Beispiel kann die folgende Definition für die Tabelle "Customers" dienen:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Betrachten Sie die folgende Definition der Tabelle "Orders", die eine Fremdschlüsselbeziehung definiert, die auf den Primärschlüssel der Tabelle "Customers" verweist:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Für den Fremdschlüssel sind sowohl eine Klausel ON UPDATE CASCADE als auch eine Klausel ON DELETE CASCADE definiert. Die ON UPDATE CASCADE-Klausel bedeutet, dass eine Aktualisierung des Kundenbezeichners (CustId) in der Tabelle "Customer" durch die Tabelle "Orders" kaskadiert wird. Jeder Auftrag, der einen entsprechenden Wert für den Kundenbezeichner enthält, wird automatisch mit dem neuen Wert aktualisiert. Die ON DELETE CASCADE-Klausel bedeutet, dass im Fall der Löschung eines Kunden aus der Tabelle "Customer" alle Zeilen in der Tabelle "Orders", die den gleichen Wert für den Kundenbezeichner enthalten, ebenfalls gelöscht werden.

Betrachten Sie die folgende abweichende Definition der Tabelle "Orders" die eine Aktion SET NULL anstelle der Aktion CASCADE verwendet:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Die Klausel ON UPDATE SET NULL bedeutet, dass im Fall der Aktualisierung eines Kundenbezeichners (CustId) in der Tabelle "Customer" die entsprechenden Fremdschlüsselwerte in der Tabelle "Orders" automatisch auf NULL festgelegt werden. Analog dazu bedeutet die Klausel ON DELETE SET NULL, dass bei Löschung eines Kunden aus der Tabelle "Customer" alle entsprechenden Fremdschlüssel in der Tabelle "Orders" automatisch auf NULL festgelegt werden.

Um die automatische Erstellung von Indizes für Fremdschlüssel zu verhindern, kann der Modifizierer NO INDEX verwendet werden. Diese Form der Fremdschlüsseldefinition sollte nur in Fällen verwendet werden, in denen die sich ergebenden Indexwerte häufig dupliziert würden. Wenn die Werte in einem Fremdschlüsselindex häufig dupliziert werden, kann die Verwendung eines Index weniger effizient sein als ein einfacher Tabellenscan. Die Wartung dieses Indextyps verringert die Leistung und bietet keinerlei Vorteile, wenn Zeilen in die Tabelle eingefügt und aus ihr gelöscht werden.



Ihre Fähigkeiten erweitern
Schulung erkunden
Neue Funktionen als Erster erhalten
An Office Insider teilnehmen

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×