## Constraints

Der Wertebereich des Datentyps einer Spalte kann mit Hilfe von sogenannten Constraints zusätzlich eingegrenzt werden.

In einer CONSTRAINT-Definition kann bis auf wenige Einschränkungen alles formuliert werden, was auch als Suchbedingung gilt. Mehrere Bedingungen können durch die Operatoren AND, OR und NOT verknüpft werden. Es können beliebig viele Spalten angesprochen werden. Dabei ist jedoch zu beachten, dass Constraints die Geschwindigkeit des Datenbanksystems bei Änderungen an Einträgen der Tabelle herabsetzen.

### Voraussetzungen

Sie benötigen die Demo-Daten für das SQL-Tutorial.

Starten Sie das Query Tool SQL Studio als Datenbankadministrator MONA mit dem Kennwort RED und melden Sie sich an die Demo-Datenbankinstanz DEMODB an.

SQL-Referenzhandbuch, CONSTRAINT-Definition (constraint_definition)

### Anlegen eines Constraint

Sie können ein Constraint direkt bei der Tabellendefinition angeben oder nachträglich zu einer vorhandenen Tabelle hinzufügen.

#### Einfache Constraints

Sie können Constraints formulieren, die sich nur auf eine Spalte der Tabelle beziehen.

Sie können die CREATE TABLE-Anweisung verwenden, um Constraints beim Anlegen einer Tabelle zu definieren.

...

1. Löschen Sie gegebenenfalls die Tabelle city.
DROP TABLE hotel.city

2. Legen Sie die Tabelle city wie folgt an:
CREATE TABLE hotel.city
(zip CHAR(5) PRIMARY KEY CONSTRAINT zip_cons CHECK
SUBSTR(zip,1,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,2,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,3,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,4,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,5,1) BETWEEN '0' AND '9',
name CHAR(30) NOT NULL,
state CHAR(2) NOT NULL)

Die Tabelle city wurde mit einem einfachen Constraint auf der Postleitzahlenspalte angelegt. Dieses Constraint bewirkt, dass für die Postleitzahl nur Ziffern von 0 bis 9 eingegeben werden können. Andere Zeichen werden bei der Dateneingabe abgewiesen.

Die Spezifizierung von NOT NULL bewirkt, dass einer Spalte ein Wert zugewiesen werden muss. Sie wird dann als Pflichtspalte (mandatory) bezeichnet.

Durch die Definition eines Constraints wird implizit festgelegt, dass der NULL-Wert nicht als Eingabe zugelassen ist.

Siehe auch:

SQL-Referenzhandbuch, CREATE TABLE-Anweisung (create_table_statement)

Sie können die ALTER TABLE-Anweisung verwenden, um Constraints zu bereits vorhandenen Tabellen hinzuzufügen.

ALTER TABLE hotel.customer ADD CONSTRAINT zip_cons CHECK
SUBSTR(zip,1,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,2,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,3,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,4,1) BETWEEN '0' AND '9' AND
SUBSTR(zip,5,1) BETWEEN '0' AND '9'

Für die Tabelle customer wurde ein einfaches Constraint auf der Postleitzahlenspalte hinzugefügt. Dieses Constraint bewirkt, dass für die Postleitzahl nur Ziffern von 0 bis 9 eingegeben werden können. Andere Zeichen werden bei der Dateneingabe abgewiesen.

ALTER TABLE hotel.customer ADD CONSTRAINT cno_cons CHECK cno > 10

//

ALTER TABLE hotel.customer ADD CONSTRAINT title_cons CHECK title IN ('Mr', 'Mrs', 'Company')

Für die Tabelle customer wurden weitere einfache Constraints definiert. Die Kundennummer soll größer als 10 sein, in die Spalte title darf nur einer der Zeichensätze Mr, Mrs oder Company eingetragen werden.

#### Komplizierte Constraints

In einem komplizierten Constraint werden Bedingungen formuliert, die sich auf mehrere Spalten der Tabelle beziehen.

ALTER TABLE hotel.reservation ADD CONSTRAINT staying CHECK
departure > arrival

In der Tabelle reservation soll überprüft werden, ob das Ankunfts- vor dem Abreisedatum liegt.

Siehe auch:

SQL-Referenzhandbuch, ALTER TABLE-Anweisung (alter_table_statement)

SQL-Referenzhandbuch, ADD-Definition (add_definition)

### Ändern eines Constraint

Sie können die ALTER TABLE-Anweisung verwenden, um vorhandene Constraints zu ändern.

ALTER TABLE hotel.customer ALTER CONSTRAINT cno_cons CHECK cno > 0

Für die Tabelle customer wurde das Constraint cno_cons geändert. Die Kundennummer soll größer als 0 sein

Siehe auch:

SQL-Referenzhandbuch, ALTER-Definition (alter_definition)

Systemtabellen auswerten, CONSTRAINTS

### Löschen eines Constraint

Sie können die ALTER TABLE-Anweisung verwenden, um ein Constraint zu löschen.

ALTER TABLE hotel.reservation DROP CONSTRAINT staying

Siehe auch:

SQL-Referenzhandbuch, DROP-Definition (drop_definition)

Weitere Beispiele zur Datendefinition