CONSTRAINT-Klausel

Eine Einschränkung ist mit einem Index zu vergleichen, kann jedoch auch zum Erstellen einer Beziehung zu einer anderen Tabelle verwendet werden.

Mit der CONSTRAINT-Klausel können Sie in ALTER TABLE- und CREATE TABLE-Anweisungen Einschränkungen erstellen oder löschen. CONSTRAINT-Klauseln können entweder zum Erstellen einer Einschränkung für ein einzelnes Feld oder zum Erstellen einer Einschränkung für mehrere Felder verwendet werden.

Hinweis : Das Microsoft Access-Datenbankmodul unterstützt bei anderen als Microsoft Access-Datenbanken die Verwendung von CONSTRAINT oder anderen Datendefinitionssprache (Data Definition Language, DDL)-Anweisungen nicht. Verwenden Sie stattdessen die Create-Methoden von Datenzugriffsobjekte (Data Access Objects, DAO).

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är1[, primär2 [, ...]]) |
UNIQUE (eindeutig1[, eindeutig2 [, ...]]) |
NOT NULL (nichtNull1[, nichtNull2 [, ...]]) |
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 den folgenden Teilen:

Teil

Beschreibung

Name

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

primär1, primär2

Die Namen der Felder, die als Primärschlüssel definiert werden sollen.

eindeutig1, eindeutig2

Die Namen der Felder, die als eindeutiger Schlüssel definiert werden sollen.

nichtNull1, nichtNull2

Die Namen der Felder, die auf Werte ungleich Null eingeschränkt werden.

Bezug1, Bezug2

Der Name der Fremdschlüsselfelder, die auf Felder in einer anderen Tabelle verweisen.

Fremdtabelle

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

Fremdfeld1, Fremdfeld2

Die Namen der Felder in der Fremdtabelle, die durch Bezug1, Bezug2 angegeben sind. Sie können diese Klausel auslassen, wenn das Feld, auf das verwiesen wird, der Primärschlüssel der Fremdtabelle ist.


Hinweise

Die Einschränkung für ein einzelnes Feld verwenden Sie in der Felddefinitionsklausel einer ALTER TABLE- oder CREATE TABLE-Anweisung unmittelbar nach der Definition des Datentyps für das Feld.

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

Mit CONSTRAINT können Sie für ein Feld einen der folgenden Einschränkungstypen festlegen:

  • Mit dem reservierten Wort UNIQUE können Sie ein Feld als eindeutigen Schlüssel definieren. Dies bedeutet, dass für zwei Datensätze in der Tabelle keine identischen Werte in diesem Feld zulässig sind. Jedes Feld bzw. alle Felder können als eindeutig festgelegt werden. Wenn eine Einschränkung für mehrere Felder als eindeutiger Schlüssel definiert wird, müssen die Werte aller Felder im Index eindeutig sein, selbst wenn zwei oder mehr Datensätze denselben Wert in nur einem der Felder aufweisen.

  • Mit den reservierten Wörtern PRIMARY KEY können Sie ein Feld oder mehrere Felder in einer Tabelle als Primärschlüssel definieren. Alle Werte des Primärschlüssels müssen eindeutig und ungleich Null sein, und pro Tabelle ist nur ein einziger Primärschlüssel zulässig.

    Hinweis : Für eine Tabelle, in der bereits ein Primärschlüssel vorhanden ist, sollten Sie keine PRIMARY KEY-Einschränkung festlegen. Andernfalls tritt ein Fehler auf.

  • Mit den reservierten Wörtern FOREIGN KEY können Sie ein Feld als Fremdschlüssel definieren. Wenn der Primärschlüssel der Fremdtabelle aus mehreren Feldern besteht, müssen Sie eine Einschränkung für mehrere Felder verwenden, in der alle Bezugsfelder, der Name der Fremdtabelle und die Namen der Felder in der Fremdtabelle, auf die verwiesen wird, in derselben Reihenfolge wie die Bezugsfelder aufgeführt sind. Wenn die Felder, auf die verwiesen wird, der Primärschlüssel der Fremdtabelle sind, müssen Sie diese Felder nicht angeben. Das Datenbankmodul verwendet diese Felder standardmäßig als Primärschlüssel der Fremdtabelle.

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

  • Sie können Aktionen angeben, die in der Fremdschlüsseltabelle ausgeführt werden, wenn eine entsprechende Aktion für einen Fremdschlüssel in der Tabelle ausgeführt wird, für die die CONSTRAINT-Klausel definiert ist. Angenommen, die folgende Definition für die Customers-Tabelle (Kunden) liegt vor:

CREATE TABLE Kunden (Kunden-Code INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Angenommen, in der Orders-Tabelle (Bestellungen) ist eine Fremdschlüsselbeziehung definiert, die auf den Primärschlüssel der Customers-Tabelle (Kunden) verweist:

CREATE TABLE Bestellungen (Bestell-Nr INTEGER PRIMARY KEY, Kunden-Code INTEGER, Bemerkungen NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (Kunden-Code) REFERENCES Kunden ON UPDATE CASCADE ON DELETE CASCADE

Sowohl eine ON UPDATE CASCADE- als auch eine ON DELETE CASCADE-Klausel sind für den Fremdschlüssel definiert. Die ON UPDATE CASCADE-Klausel besagt, dass beim Aktualisieren einer Kunden-ID in der Customers-Tabelle (Kunden) die Aktualisierung an die Orders-Tabelle (Bestellungen) weitergegeben wird. Jede Bestellung, die eine entsprechende Kunden-ID enthält, wird automatisch mit dem neuen Wert aktualisiert. Die ON DELETE CASCADE-Klausel besagt, dass beim Löschen eines Kunden aus der Customers-Tabelle alle Zeilen in der Orders-Tabelle, die denselben Kunden-Code enthalten, ebenfalls gelöscht werden.

Angenommen, die Orders-Tabelle (Bestellungen) enthält eine andere Definition, in der die SET NULL-Aktion anstelle der CASCADE-Aktion verwendet wird:

CREATE TABLE Bestellungen (Bestell-Nr INTEGER PRIMARY KEY, Kunden-Code INTEGER, Bemerkungen NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (Kunden-Code) REFERENCES Kunden ON UPDATE SET NULL ON DELETE SET NULL

Die ON UPDATE SET NULL-Klausel besagt, dass beim Aktualisieren einer Kunden-ID in der Customers-Tabelle (Kunden) die entsprechenden Fremdschlüsselwerte in der Orders-Tabelle (Bestellungen) automatisch auf NULL festgelegt werden. Entsprechend besagt die ON DELETE SET NULL-Klausel, dass beim Löschen eines Kunden aus der Customers-Tabelle alle entsprechenden Fremdschlüssel in der Orders-Tabelle automatisch auf NULL festgelegt werden.

Um das automatische Erstellen von Indizes für Fremdschlüssel zu verhindern, kann der NO INDEX-Modifizierer verwendet werden. Diese Art der Fremdschlüsseldefinition sollte nur verwendet werden, wenn die sich ergebenden Indexwerte häufig dupliziert würden. In diesem Fall ist das Verwenden eines Indexes möglicherweise nicht so effizient wie das Ausführen eines Tabellenscans. Diese Art von Index, bei dem Zeilen in der Tabelle eingefügt und gelöscht werden, beeinträchtigt die Leistung und bietet keinerlei Vorteile.



Teilen Facebook Facebook Twitter Twitter E-Mail E-Mail

War diese Information hilfreich?

Sehr gut. Noch anderes Feedback?

Was können wir verbessern?

Vielen Dank für Ihr Feedback!

×