Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Spaltenbedingung

Bei der Erzeugung oder Änderung einer Basistabelle (CREATE TABLE, ALTER TABLE) können in der Spaltendefinition für einzelne Spalten Spaltenbedingungen angegeben werden. Die Spalte darf keine multiple Spalte sein.

Eine Spaltenbedingung ist eine Integritätsbedingung, die sich auf eine Spalte bezieht. Alle Werte der Spalte müssen die Integritätsbedingung erfüllen.

Für CALL-DML-Tabellen darf nur die Integritätsbedingung PRIMARY KEY definiert werden.


spaltenbedingung ::=

{

   NOT NULL |

   UNIQUE |

   PRIMARY KEY |

   REFERENCES tabelle [( spalte )] |

   CHECK ( suchbedingung)

}



NOT NULL

Nicht-NULL-Bedingung.
Die Spalte darf keine NULL-Werte enthalten.

Die Nicht-NULL-Bedingung wird als Check-Bedingung (spalte IS NOT NULL) abgespeichert.


UNIQUE

Eindeutigkeitsbedingung.
Die Spaltenwerte, die ungleich dem NULL-Wert sind, müssen eindeutig sein.

Die Spaltenlänge muss die Einschränkungen erfüllen, die für einen Index gelten (siehe CREATE INDEX-Anweisung, "CREATE INDEX - Index erzeugen").


PRIMARY KEY

Primärschlüsselbedingung.
Die Spalte ist der Primärschlüssel der Tabelle. Die Werte der Spalte müssen eindeutig sein. Für jede Tabelle kann nur ein Primärschlüssel definiert werden.

Die Spalte darf nicht vom Datentyp VARCHAR oder NVARCHAR sein. Die Länge der Spalte einer CALL-DML-Tabelle muss zwischen 4 und 256 Zeichen liegen. Für SQL-Tabellen gibt es keine Minimallänge.

Für eine Primärschlüsselspalte gilt implizit auch die Nicht-NULL-Bedingung.


REFERENCES

Referenzbedingung.

Die Spalte der referenzierenden Tabelle darf einen vom NULL-Wert verschiedenen Wert nur dann enthalten, wenn derselbe Wert in der referenzierten Spalte der referenzierten Tabelle enthalten ist.

Der aktuelle Berechtigungsschlüssel muss das Privileg REFERENCES für die referenzierten Spalten besitzen.

tabelle

Name der referenzierten Basistabelle.
Die referenzierte Basistabelle muss eine SQL-Tabelle sein. Der einfache Name der referenzierten Basistabelle kann durch einen Datenbank- und Schemanamen qualifiziert werden. Der Datenbankname muss mit dem Datenbanknamen der referenzierenden Tabelle übereinstimmen.

(spalte)

Name der referenzierten Spalte.
Die referenzierte Spalte muss mit UNIQUE oder PRIMARY KEY definiert sein. Die referenzierte Spalte darf keine multiple Spalte sein. Referenzierende Spalte und referenzierte Spalte müssen genau denselben Datentyp besitzen.

(spalte) nicht angegeben:
Der Primärschlüssel der referenzierten Tabelle wird als referenzierte Spalte verwendet. Referenzierende Spalte und referenzierte Spalte müssen genau denselben Datentyp besitzen.


CHECK (suchbedingung)

Check-Bedingung.
Für jeden Wert der Spalte muss die Suchbedingung suchbedingung den Wahrheitswert wahr oder unbestimmt annehmen, nicht jedoch den Wahrheitswert falsch.

Für suchbedingung gelten folgende Einschränkungen:

    • suchbedingung darf keine Benutzervariablen enthalten.

    • suchbedingung darf keine Mengenfunktion enthalten.

    • suchbedingung darf keine Unterabfrage enthalten, also kann sich suchbedingung nur auf die Spalte der Tabelle beziehen, zu der die Spaltenbedingung gehört.

    • suchbedingung darf keine Zeitfunktion enthalten.

    • suchbedingung darf kein Spezial-Literal enthalten.

    • suchbedingung darf keine Transliteration zwischen EBCDIC und Unicode enthalten.

    • suchbedingung darf keine Umwandlung von Großbuchstaben in Kleinbuchstaben oder von Kleinbuchstaben in Großbuchstaben enthalten, wenn die umzuwandelnde Zeichenkette eine Unicode-Zeichenkette ist.

    • suchbedingung darf keine multiple Spalte sein.

    • suchbedingung darf keine User Defined Function (UDF) enthalten.

Besonderheiten für CALL-DML-Tabellen

Bei Spaltenbedingungen müssen für CALL-DML-Tabellen folgende Einschränkungen berücksichtigt werden:

  • Eine CALL-DML-Tabelle muss genau eine Primärschlüsselbedingung als Spaltenbedingung oder als Tabellenbedingung enthalten.

  • Als Spaltenbedingung ist nur PRIMARY KEY erlaubt.

  • Der Datentyp der Spalte mit PRIMARY KEY muss CHAR mit einer Länge von mindestens 4 Zeichen sein.

Spaltenbedingung und Index

Wenn Sie eine Eindeutigkeitsbedingung definieren, wird dafür ein Index mit der bei UNIQUE angegebenen Spalte verwendet:

  • Wenn Sie mit CREATE INDEX bereits einen Index definiert haben, der dieselbe Spalte enthält, so wird dieser Index zusätzlich für die Eindeutigkeitsbedingung verwendet.

  • Ansonsten wird der benötigte Index implizit erzeugt. Der Name des implizit erzeugten Index beginnt mit UI, gefolgt von einer 16-stelligen Nummer.
    Der Index wird im Space der Basistabelle gespeichert. Bei einer partitionierten Tabelle wird der Index im Space der ersten Partition der Tabelle gespeichert.

Beispiele für Spaltenbedingung

Das Beispiel zeigt einen Ausschnitt aus der CREATE TABLE-Anweisung, die die Tabelle LEISTUNG der Datenbank AUFTRAGKUNDEN erzeugt. Für die Spalte LANZ wird eine Check-Bedingung definiert.

CREATE TABLE leistung (...,

lanz INTEGER CONSTRAINT lanz_pos CHECK (lanz > 0))


Für die Spalte FIRMA wird eine Nicht-NULL-Bedingung definiert, deren Namen explizit angegeben wird. KNR wird durch die Spaltenbedingung KNR_PRIMARY als Primärschlüssel definiert.

CREATE TABLE kunde

(knr INTEGER CONSTRAINT knr_primary PRIMARY KEY,

firma CHAR(40) CONSTRAINT firma_notnull NOT NULL)


Für die Tabelle AUFTRAG wird eine Referenzbedingung FOREIGN1 definiert, in der sich der Fremdschlüssel AUFTRAG.KNR auf die Spalte KUNDE.KNR bezieht.

ALTER TABLE auftrag

ADD CONSTRAINT foreign1 FOREIGN KEY(knr)

REFERENCES kunde(knr)