Eine CONSTRAINT-Definition (constraint_definition) definiert eine Integritätsbedingung (Beschränkungen für Spaltenwerte, siehe Datenintegrität), der alle Zeilen einer Tabelle genügen müssen.
<constraint_definition> ::= CHECK <search_condition>
| CONSTRAINT <search_condition>
| CONSTRAINT <constraint_name> CHECK
<search_condition>
search_condition, constraint_name
Einfaches Constraint (für eine Spalte), Beispieltabelle customer
title CHAR(7) CONSTRAINT title IN ('Mr','Mrs','Comp')
Kompliziertes Constraint (für mehrere Spalten), Beispieltabelle reservation
arrival DATE NOT NULL
departure DATE CONSTRAINT departure > arrival
Es wird überprüft, ob die Ankunft vor der Abreise liegt.
Eine CONSTRAINT-Definition definiert eine Integritätsbedingung, die alle Spaltenwerte der durch die Spaltendefinition mit CONSTRAINT-Definition definierten Spalte erfüllen müssen.
Die CONSTRAINT-Definition einer Spalte wird beim Einfügen einer Zeile und beim Ändern einer Spalte, die in der CONSTRAINT-Definition auftritt, überprüft. Wird die CONSTRAINT-Definition verletzt, scheitert die INSERT- bzw. UPDATE-Anweisung.
Durch die Definition eines Constraints wird implizit festgelegt, daß der NULL-Wert nicht als Eingabe zugelassen ist.
Die Suchbedingung (search_condition) der CONSTRAINT-Definition darf keine Subquery enthalten.
Die Suchbedingung der CONSTRAINT-Definition darf Spaltennamen nur in der Form <column_name> enthalten.
·
Kein Constraint-Name:
Vom Datenbanksystem wird ein für die Tabelle eindeutiger Constraint-Name
vergeben.
·
Constraint-Name wird angegeben:
Der Constraint-Name muß sich von allen anderen Constraint-Namen der Tabelle
unterscheiden.
·
Enthält nur einen Spaltennamen der Tabelle:
Beim Erzeugen der Tabelle (CREATE
TABLE-Anweisung) kann geprüft werden, ob ein zusätzlich als
Spaltenattribut angegebener DEFAULT-Wert (default_spec) die
Suchbedingung erfüllt. Ist dies nicht der Fall, scheitert die CREATE
TABLE-Anweisung.
·
Enthält mehr als einen Spaltennamen der
Tabelle:
Zum Zeitpunkt der Tabellenerzeugung (CREATE TABLE-Anweisung) kann nicht
entschieden werden, ob DEFAULT-Werte der Tabellenspalten die Suchbedingung
erfüllen. In diesem Fall kann der Versuch, DEFAULT-Werte in die Tabelle
einzufügen, bei Ausführung einer INSERT- oder UPDATE-Anweisung
scheitern.