## Spaltenattribute (column_attributes)

Bei einer Spaltendefinition können neben den Spaltennamen (column_name) Spaltenattribute (column_attributes) angegeben werden.

### Syntax

<column_attributes> ::= [<key_or_not_null_spec>] [<default_spec>] [UNIQUE] [<constraint_definition>]
[REFERENCES <referenced_table> [(<referenced_column>)] [<delete_rule>]]

<key_or_not_null_spec> ::= [PRIMARY] KEY | NOT NULL [WITH DEFAULT]

<referenced_table> ::= <table_name>

<referenced_column> ::= <column_name>

### Erläuterung

Eine CONSTRAINT-Definition constraint_definition definiert eine Bedingung, die alle Spaltenwerte der durch die Spaltendefinition column_definition definierten Spalte erfüllen müssen.

Die Angabe von [REFERENCES <referenced_table> [(<referenced_column>)] [<delete_rule>] hat die gleiche Wirkung wie die Angabe der referentiellen CONSTRAINT-Definition FOREIGN KEY [<referential_constraint_name>] (<referencing_column>) REFERENCES <referenced_table> [(<referenced_column>,...)] [<delete_rule>]

referenced_table referenced_column | referenzierte Tabelle referenzierte Spalte

Datentyp LONG: Für Spalten vom Datentyp LONG darf als Spaltenattribut nur NOT NULL oder eine DEFAULT-Spezifikation angegeben werden.

#### UNIQUE

Wenn das Spaltenattribut UNIQUE angegeben ist, wird dadurch die Eindeutigkeit von Spaltenwerten festgelegt (siehe auch CREATE INDEX-Anweisung).

#### [PRIMARY] KEY

Bei einer Spaltendefinition dürfen die Spaltenattribute [PRIMARY] KEY und UNIQUE nicht gemeinsam verwendet werden.

Wenn das Spaltenattribut [PRIMARY] KEY angegeben ist, darf die CREATE TABLE-Anweisung keine Schlüsseldefinition enthalten.

Wenn das Spaltenattribut KEY angegeben ist, ist diese Spalte Bestandteil des Schlüssels einer Tabelle und heißt Schlüsselspalte. Das Datenbanksystem garantiert die Eindeutigkeit der Schlüsselwerte in einer Tabelle. Aus Gründen der Ausführungsgeschwindigkeit ist es zweckmäßig, den Schlüssel mit Schlüsselspalten, die viele verschiedene Werte annehmen können und häufig in Bedingungen mit dem Operator "=" verwendet werden sollen, beginnen zu lassen.

Siehe auch:

Restriktionen für SQL-Anweisungen

Wenn eine Tabelle ohne Schlüsselspalte definiert wird, legt das Datenbanksystem implizit eine Schlüsselspalte SYSKEY CHAR(8) BYTE an. Diese Spalte ist bei einem SELECT * nicht sichtbar. Sie kann jedoch explizit angegeben werden und hat dann dieselbe Funktion wie eine Schlüsselspalte. Die SYSKEY-Spalte kann dazu verwendet werden, eindeutige Schlüssel vom Datenbanksystem erzeugen zu lassen. Die Schlüssel sind aufsteigend, so dass die Einfügereihenfolge in die Tabelle widergespiegelt wird. Die Schlüsselwerte in der Spalte SYSKEY sind jedoch nur innerhalb einer Tabelle eindeutig, d.h. in zwei voneinander verschiedenen Tabellen können gleiche Werte in der SYSKEY-Spalte existieren. Wenn eindeutige Schlüssel innerhalb des gesamten Datenbanksystems erwünscht sind, kann eine Schlüsselspalte vom Datentyp CHAR(8) BYTE mit der DEFAULT-Spezifikation STAMP definiert werden.

#### NOT NULL

· NOT NULL darf nicht zusammen mit der DEFAULT-Spezifikation NULL verwendet werden.

· NOT NULL WITH DEFAULT definiert einen Vorschlagswert (DEFAULT-Wert), der abhängig vom Datentyp der Spalte ist. NOT NULL WITH DEFAULT darf nicht zusammen mit irgendeiner der DEFAULT-Spezifikationen verwendet werden.

Datentyp der Spalte | DEFAULT-Wert
CHAR(n); VARCHAR(n) | ' '
CHAR(n) BYTE; VARCHAR(n) BYTE | X'00'
FIXED(p,s), INT, SMALLINT, FLOAT(p) | 0
DATE | DATE
TIME | TIME
TIMESTAMP | TIMESTAMP
BOOLEAN | FALSE