Anfang des Inhaltsbereichs

CREATE TABLE-Anweisung (create_table_statement)  Dokument im Navigationsbaum lokalisieren

Eine CREATE TABLE-Anweisung (create_table_statement) definiert eine Basistabelle (siehe Tabelle).

Syntax

<create_table_statement> ::=
  CREATE TABLE <table_name> (<column_definition>[,<table_description_element>,...])
  [IGNORE ROLLBACK] [<sample_definition>]
| CREATE TABLE <table_name> [(<table_description_element>,...)]
  [IGNORE ROLLBACK] [<sample_definition>] AS <query_expression> [<duplicates_clause> ]
| CREATE TABLE <table_name> LIKE <table_name> [IGNORE ROLLBACK]

<table_description_element> ::= <column_definition> | < constraint_definition> | <referential_constraint_definition> | <key_definition> | <unique_definition>

table_name, sample_definition, query_expression, duplicates_clause, column_definition, constraint_definition, referential_constraint_definition, key_definition, unique_definition

Beispiel

SQL-Anweisung, um eine Tabelle person anzulegen:

CREATE TABLE person (cno FIXED(4), firstname CHAR(7), name CHAR(7), account FIXED(7,2))

Diese CREATE TABLE-Anweisung besteht aus den Schlüsselwörtern CREATE TABLE, gefolgt vom Tabellennamen, und (in Klammern) einer Liste von Spaltenbezeichnern, die durch Komma voneinander getrennt sind. Weitere optionale Festlegungen sind möglich (Zuordnung eines Primärschlüssels, Festlegung referentieller Integritätsbedingungen).

weitere Beispiele: customer, hotel, reservation, room

Erläuterung

Die Ausführung einer CREATE TABLE-Anweisung führt zur Ablage von Daten im Datenbankkatalog, die die Tabelle (genannt Basistabelle) beschreiben. Diese Daten heißen Metadaten.

Eine CREATE TABLE-Anweisung darf höchstens eine Schlüsseldefinition (key_definition) enthalten.

Der Tabellenname (table_name) darf nicht mit dem Namen einer bereits existierenden Tabelle des aktuellen Benutzers übereinstimmen.

Der aktuelle Benutzer wird zum Eigentümer (owner) der erzeugten Tabelle. Er erhält das INSERT-, UPDATE-, DELETE- und SELECT-Privileg für diese Tabelle. Wenn es sich nicht um eine temporäre Tabelle handelt, erhält der Eigentümer zusätzlich das INDEX-, REFERENCES- und ALTER-Privileg.

Siehe auch:

Restriktionen

Eigentümer einer Tabelle

·        Eigentümer einer Tabelle ist vor dem Tabellennamen angegeben: Eine spezielle Art von Tabellen sind temporäre Tabellen. Sie haben nur während einer Datenbanksitzung eines Benutzers Bestand und werden anschließend samt Inhalt wieder gelöscht. Gekennzeichnet werden temporäre Tabellen durch die Angabe des Eigentümers TEMP vor ihren Namen.
Wenn ein Tabellenname einen von TEMP verschiedenen Eigentümer besitzt, muss der Eigentümer mit dem Namen des aktuellen Benutzers übereinstimmen und dieser muss den Status DBA oder RESOURCE besitzen.

·        Eigentümer einer Tabelle ist nicht angegeben: Diese Angabe hat die gleiche Wirkung wie die Angabe des aktuellen Benutzers als Eigentümer.

CREATE TABLE … AS <query_expression> …

·        Wenn kein QUERY-Ausdruck (query_expression) angegeben ist, muss die CREATE TABLE-Anweisung mindestens eine Spaltendefinition (column_definition) enthalten.

·        Bei Angabe eines QUERY-Ausdrucks wird eine Basistabelle definiert, die die gleiche Struktur wie die durch den QUERY-Ausdruck definierte Ergebnistabelle besitzt.
Wenn Spaltendefinitionen angegeben sind, darf die Spaltendefinition nur aus einem Spaltennamen bestehen und die Anzahl der Spaltendefinitionen muss der Anzahl der Spalten der durch den QUERY-Ausdruck erzeugten Ergebnistabelle entsprechen.
Der Datentyp (data_type) der i-ten Spalte der Basistabelle entspricht dem der i-ten Spalte der durch den QUERY-Ausdruck erzeugten Ergebnistabelle.
Die Ergebnistabelle darf auch LONG-Spalten enthalten.
Wenn keine Spaltendefinitionen angegeben sind, werden die Spaltennamen der Ergebnistabelle übernommen.
Die Zeilen der Ergebnistabelle werden implizit in die erzeugte Basistabelle eingefügt. Durch die DUPLICATES-Klausel kann das Verhalten beim Auftreten von Schlüsselkollisionen gesteuert werden.
Für den QUERY-Ausdruck gelten einige Einschränkungen, die auch für die INSERT-Anweisung gelten.

LIKE <table_name>

Die Angabe von LIKE <table_name> bewirkt das Anlegen einer leeren Basistabelle, die die gleiche Struktur wie diese Tabelle aus Sicht des aktuellen Benutzers besitzt, d.h. sie besitzt alle Spalten mit den gleichen Spaltennamen und -definitionen wie diese Tabelle, die dem Benutzer bekannt sind. Diese Sicht muss nicht mit der tatsächlichen Struktur der angegebenen Tabelle übereinstimmen, da dem Benutzer durch eingeschränkte Privilegierung nicht alle Spalten bekannt sein müssen.

Die angegebene Tabelle muss eine Basistabelle, eine View-Tabelle oder ein Synonym bezeichnen. Der Benutzer muss mindestens ein Privileg für diese Tabelle besitzen.

Der aktuelle Benutzer ist der Eigentümer der Basistabelle.

Wenn alle Schlüsselspalten der nach LIKE angegebenen Tabelle in der Basistabelle enthalten sind, bilden diese die Schlüsselspalten dieser Tabelle. Ist dies nicht der Fall, wird vom Datenbanksystem implizit eine Schlüsselspalte SYSKEY CHAR(8) BYTE angelegt, die den Schlüssel der Basistabelle bildet.

DEFAULT-Spezifikationen der Spalten oder CONSTRAINT-Definitionen für Spalten, die in die Basistabelle übernommen werden, gelten auch für die neu erzeugte Basistabelle.

IGNORE ROLLBACK

Die Angabe von IGNORE ROLLBACK ist optional und nur für temporäre Tabellen zulässig. Eine temporäre Tabelle mit diesem Merkmal unterliegt nicht dem Transaktionsmechanismus, d.h. durch Zurücksetzen einer Transaktion werden die diese Tabelle betreffenden Änderungen nicht rückgängig gemacht.

SQL-Anweisungen, um Tabelleneigenschaften zu verändern

Hinzufügen, Löschen von Spalten, Verändern von Datentypen, Verändern der CONSTRAINT-Definition

ALTER TABLE-Anweisung

Umbenennen von Spalten

RENAME COLUMN-Anweisung

Umbenennen der Tabelle

RENAME TABLE-Anweisung

Ende des Inhaltsbereichs