TABELLE ERSTELLEN
Mit dem CREATE TABLE-Befehl können Sie eine neue, anfänglich leere Tabelle in der aktuellen Datenbank erstellen. Der CREATE TABLE-Befehl erstellt automatisch einen Datentyp, der den Tupeltyp (Strukturtyp) darstellt, der einer einzelnen Zeile der Tabelle entspricht.
- Denselben Namen wie ein vorhandener Datentyp.
- Denselben Namen wie eine Systemkatalogtabelle.
- Mehr als 1600 Spalten. Das effektive Limit ist aufgrund von Beschränkungen bei der Tupellänge ein wenig niedriger.
- Tabellen- oder Ansichtsattribute mit den folgenden Namen:
- cmax
- cmin
- createxid
- ctid
- datasliceid
- deletexid
- oid
- rowid (Zeilenkennung)
- tableoid
- xmax
- xmin
Die optionalen Integritätsbedingungsklauseln geben Integritätsbedingungen (oder Tests) an, die neue oder aktualisierte Zeilen erfüllen müssen, damit eine Einfüge- oder Aktualisierungsoperation erfolgreich ausgeführt wird. Eine Integritätsbedingung ist eine benannte Regel, d. h. ein SQL-Objekt, das die Definition gültiger Wertesets unterstützt, indem die Ergebnisse von Einfüge-, Aktualisierungs- oder Löschoperationen, die für eine Tabelle verwendet werden, begrenzt werden. Netezza Performance Server unterstützt keine Constraint-Prüfungen; wenn Sie Constraints angeben, müssen Sie die Constraint-Prüfung und die referentielle Integrität durchführen)
- Eine Spaltenintegritätsbedingung wird als Teil einer Spaltendefinition definiert.
- Eine Tabellenintegritätsbedingung ist nicht an eine bestimmte Spalte gebunden und sie kann mehr als eine Spalte umfassen.
Sie können jede Spaltenintegritätsbedingung auch als Tabellenintegritätsbedingung schreiben. Eine Spaltenintegritätsbedingung ist lediglich eine zweckmäßige Art der Notation, wenn die Integritätsbedingung nur eine einzige Spalte betrifft.
- Verteilungsspezifikation
- Jede Tabelle in einer Netezza Performance Server RDBMS-Datenbank hat nur einen Verteilungsschlüssel, der aus einer bis vier Spalten besteht. Sie können die folgende SQL-Syntax verwenden, um Verteilungsschlüssel zu erstellen.
- Um einen expliziten Verteilungsschlüssel zu erstellen, lautet die SQL-Syntax des Netezza Performance Server:
CREATE TABLE <tablename> [ ( <col>[,<col>… ] ) ] AS <select_clause> [ DISTRIBUTE ON [HASH] ( <col>[<col>,… ] ) ]Die
distribute on-Phrase gibt den Verteilungsschlüssel an, das Worthashist optional. - Um einen Round-Robin-Verteilungsschlüssel zu erstellen, lautet die SQL-Syntax des Netezza Performance Server:
CREATE TABLE <tablename> (col1 int, col2 int, col3 int) DISTRIBUTE ON RANDOM;Die Formulierung "
distribute on randomgibt die Verteilung nach dem Rundlaufverfahren an. - Um eine Tabelle ohne Angabe eines Verteilungsschlüssels zu erstellen, lautet die SQL-Syntax des Netezza Performance Server:
CREATE TABLE <tablename> (col1 int, col2 int, col3 int);Das Netezza Performance Server wählt einen Verteilungsschlüssel. Es gibt keine Möglichkeit, sicherzustellen, wie dieser Schlüssel lautet, und er kann je nach Version der Netezza Performance Server variieren.
- Um einen expliziten Verteilungsschlüssel zu erstellen, lautet die SQL-Syntax des Netezza Performance Server:
- Regelaktion für Integritätsbedingungen
- Sie können die folgenden Aktionen beim Aktualisieren oder Löschen einer Integritätsbedingung angeben. Da das System die Überprüfung der Integritätsbedingungen nicht erzwingt, werden diese Regeln
nicht verwendet, sondern lediglich akzeptiert.
- CASCADE aktualisiert den Wert der referenzierenden Spalte in den neuen Wert der referenzierten Spalte.
- SET NULL legt die referenzierende Spalte auf den neuen Wert der referenzierten Spalte fest.
- SET DEFAULT legt die referenzierte Spalte fest
- RESTRICT entspricht NO ACTION
- NO ACTION produziert einen Fehler, wenn der Fremdschlüssel nicht eingehalten wird.
- Attribute für Integritätsbedingungen
- Integritätsbedingungen können die folgenden Attribute haben, die festlegen, ob die
Integritätsbedingungsprüfung sofort oder verzögert ausgeführt wird. Da das System die Überprüfung der Integritätsbedingungen nicht erzwingt, werden diese Attribute
nicht verwendet, sondern lediglich akzeptiert.
- [NOT] DEFERRABLE legt fest, ob die Integritätsbedingung am Ende der Transaktion geprüft wird.
- INITIALLY DEFERRED prüft die Integritätsbedingung lediglich am Ende der Transaktion.
- INITIALLY IMMEDIATE prüft die Integritätsbedingung nach jeder Anweisung.
Syntax
CREATE [ TEMPORARY | TEMP ] TABLE [IF NOT EXISTS] <table>
( <col> <type> [<col_constraint>][,<col> <type> [<col_constraint>]…]
[<table_constraint>[,<table_constraint>… ] )
[ DISTRIBUTE ON { RANDOM | [HASH] (<col>[,<col>…]) } ]
[ ORGANIZE ON { (<col>) | NONE } ]
[ ROW SECURITY ]
[ DATA_VERSION_RETENTION_TIME <number-of-days> ]<col_constraint> für:[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]<table_constraint> für:[ CONSTRAINT <constraint_name> ]
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]<ref> für:REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]Das System erlaubt und verwaltet Integritätsbedingungen über Primär- und Fremdschlüssel, Standardintegritätsbedingungen, eindeutige Integritätsbedingungen und Integritätsbedingungen in Form von Referenzen. Das System unterstützt weder Integritätsbedingungsprüfungen noch referenzielle Integrität. Der Benutzer muss Integritätsbedingungsprüfungen und referenzielle Integrität sicherstellen.
Eingaben
| Eingabe | Beschreibung |
|---|---|
| TEMP[ORARY] | Die zu erstellende Tabelle soll eine temporäre Tabelle sein. |
| IF NOT EXISTS | Wenn eine Tabelle mit dem angegebenen Namen in der aktuellen Datenbank und im aktuellen Schema vorhanden ist, löst der CREATE TABLE-Befehl keinen Fehler aus, weil er die Tabelle nicht erstellen konnte. Diese Option wird in der Regel für scriptgesteuerte Anwendungen verwendet, die SQL-Befehle ausführen, wenn Sie die Fehlernachricht zu einer nicht gefundenen Tabelle unterdrücken wollen, sodass sie sich nicht auf die scriptgesteuerte Anwendung auswirkt oder die scriptgesteuerte Anwendung nicht stoppt. Wenn Sie diese Option einschließen, beachten Sie das folgende Verhalten:
|
| <Tabelle> | Der Name der zu erstellenden Tabelle. |
| <Spalte> | Der Name einer Spalte, die in der neuen Tabelle erstellt werden soll. |
| <type> | Der Datentyp der Spalte. |
| DISTRIBUTE ON | Jede Tabelle in der Datenbank muss einen Verteilungsschlüssel haben, der aus ein bis vier Spalten besteht. Der Standardwert ist RANDOM, der das System veranlasst, einen zufälligen Verteilungsschlüssel auszuwählen. |
| HASH | Dieser Parameter kann zu Erläuterungszwecken angegeben werden, hat jedoch keine Auswirkungen auf den Befehl. |
| ORGANIZE ON | Spalten (von eins bis vier), anhand derer die Tabelle organisiert werden soll. Dies kann für externe Tabellen nicht angegeben werden. Wenn Spalten angegeben werden, kann es für die Tabelle keine materialisierten Ansichten geben. Außerdem ist es erforderlich, dass alle angegebenen Spaltendatentypen in einer Zonenmap dargestellt werden können. Die Tabellendatenumorganisation tritt in Kraft, wenn GROOM TABLE ausgeführt wird. Weitere Informationen finden Sie unter "Using Clustered Base Tables" im IBM® Netezza® System Administrator's Guide. |
| ROW SECURITY | Tabelle mit Sicherheit auf Zeilenebene erstellen. |
| <Integritätsbedingungsname> | Der Name, der einer Spaltenintegritätsbedingung oder einer Tabellenintegritätsbedingung gegeben werden soll. Wenn Sie keinen Namen angeben, generiert das System einen. |
| NOT DEFERRABLE | DEFERRABLE | Steuert, ob die Integritätsbedingung bis zum Ende der Transaktion aufgeschoben werden kann. NOT DEFERRABLE ist der Standardwert. Netezza Performance Server unterstützt keine Constraint-Prüfung und referentielle Integrität) |
| INITIALLY | Gibt DEFERRED (am Ende der Transaktion) oder IMMEDIATE (am Ende jeder Anweisung) an. |
| NOT NULL | NULL | Gibt an, ob die Spalte Nullwerte enthalten darf. NULL ist der Standardwert. |
| UNIQUE (Spalten- und Tabellenintegritätsbedingung) | Gibt an, ob jeder Wert in der Spalte eindeutig sein muss. |
| PRIMARY KEY (Spalten- und Tabellenintegritätsbedingung) | Gibt an, ob die angegebenen Spalten den Primärschlüssel der Tabelle bilden sollen. Diese Integritätsbedingung ist im Wesentlichen eine Kombination der Integritätsbedingungen UNIQUE und NOT NULL, durch die Angabe von Spalten als Primärschlüssel werden jedoch auch Metadaten zum Design des Schemas bereitgestellt. Ein Primärschlüssel impliziert, dass andere Tabellen diese Spaltengruppe als eindeutige Kennung für Zeilen verwenden können. Sie können nur eine Integritätsbedingung über Primärschlüssel für eine Tabelle angeben, entweder als Spalteneinschränkung oder als Tabelleneinschränkung. Die Spaltengruppe, aus der der Primärschlüssel besteht, muss sich von der Spaltengruppe unterscheiden, die von anderen eindeutigen Integritätsbedingungen für die Tabelle definiert werden. |
| DEFAULT (Spaltenintegritätsbedingung) | Der Standardwert, der in jede Zeile dieser Spalte gestellt werden soll. |
| REFERENCES (Spaltenintegritätsbedingung) | Die angegebenen Spalten der neuen Tabellen dürfen nur Werte enthalten, die den Werten in den angegebenen Spalten der angegebenen Tabelle entsprechen. |
| FOREIGN KEY und REFERENCES table (Tabellenintegritätsbedingung) | Die angegebenen Spalten der neuen Tabellen dürfen nur Werte enthalten, die den Werten in den angegebenen Spalten der angegebenen Tabelle entsprechen. Wenn Sie keine Spalte angeben, muss der Wert mit dem Primärschlüssel der Tabelle übereinstimmen. Die angegebenen Spalten der referenzierten Tabelle müssen in dieser Tabelle über eine eindeutige Integritätsbedingung oder eine Integritätsbedingung über Primärschlüssel verfügen. |
| MATCH FULL | MATCH FULL verhindert, dass eine Spalte eines mehrspaltigen Fremdschlüssels null ist, wenn andere Teile des Fremdschlüssels nicht null sind. Dies ist die Standardeinstellung. MATCH PARTIAL wird nicht unterstützt. |
| ON UPDATE | ON DELETE | Die Aktion, die ausgeführt werden soll, wenn die angegebene Tabelle oder die angegebenen Spalten aktualisiert oder gelöscht werden:
|
| DATA_VERSION_RETENTION_TIME <Anzahl der Tage> | Die Tabelle tbl , die erstellt wird, hat die angegebene DATA_VERSION_RETENTION_TIME oder erhält den aktuellen Wert der Eigenschaft aus dem Schema, wenn nichts angegeben ist. Wenn die DATA_VERSION_RETENTION_TIME für eine Tabelle 0 ist (unabhängig davon, ob sie explizit angegeben oder aus dem Schema geerbt wurde), sind keine historischen Daten für die Tabelle für temporale Abfragen verfügbar. Gelöschte Zeilen können jedoch aus anderen Gründen beibehalten werden. Zum Beispiel eine inkrementelle Sicherung. Wenn DATA_VERSION_RETENTION_TIME für eine Tabelle ungleich Null ist, sind historische Zeilen, die diese Anzahl von Tagen zurückreichen, für zeitliche Abfragen verfügbar.Die Klausel DATA_VERSION_RETENTION_TIME kann nicht mit CREATE TEMPORARY TABLE verwendet werden. Alle temporären Tabellen sind nicht-temporal und unterstützen keine Zeitreiseabfragen.Der zulässige Höchstwert beträgt 92 Tage, was der maximalen Anzahl von Tagen in einem Kalenderquartal entspricht. |
Ausgaben
Der Befehl hat die folgende Ausgabe:
| Ausgabe | Beschreibung |
|---|---|
| CREATE TABLE | Das System gibt diese Nachricht zurück, wenn der Befehl erfolgreich beendet wurde. |
| ERROR | Das System gibt diese Nachricht zurück, wenn die Tabellenerstellung fehlschlägt. Die Fehlermeldung enthält einen beschreibenden Text, wie z. B.:ERROR: Relation 'table' already existsoder andere Nachrichten. Wenn Sie die IF NOT EXISTS-Syntax angeben, löst das System keinen Fehler aus, wenn eine gleichnamige Tabelle bereits in der aktuellen Datenbank und im aktuellen Schema vorhanden ist. |
Zugriffsrechte
Sie müssen der Benutzer mit Administratorberechtigung oder der Eigner der Datenbank oder des Schemas sein oder Ihr Konto muss über die Berechtigung zum Erstellen von Tabellen verfügen.
Verwendung
Es folgen Verwendungsbeispiele:
- Erstellen Sie eine Tabelle wie folgt:
CREATE TABLE name ( code CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY, title CHARACTER VARYING(40) NOT NULL, did DECIMAL(3) NOT NULL, date_prod DATE, kind CHAR(10), len INTERVAL HOUR TO MINUTE ); - Zum Definieren einer Tabellenintegritätsbedingung über Primärschlüssel für die Tabelle films können Sie Tabellenintegritätsbedingungen über Primärschlüssel für eine oder mehrere Spalten der Tabelle definieren:
CREATE TABLE films ( code CHAR(5), title VARCHAR(40), did DECIMAL(3), date_prod DATE, kind VARCHAR(10), len INTERVAL HOUR TO MINUTE, CONSTRAINT code_title PRIMARY KEY(code,title) ); - Integritätsbedingung über Primärschlüssel für die Tabelle distributors definieren:
CREATE TABLE distributors ( did DECIMAL(3), name CHAR VARYING(40), PRIMARY KEY(did) ); CREATE TABLE distributors ( did DECIMAL(3) PRIMARY KEY, name VARCHAR(40) );Die beiden Beispiele entsprechen sich funktional. Im ersten Beispiel wird die Syntax für Tabellenintegritätsbedingungen verwendet. Im zweiten Beispiel wird die Notation von Spaltenintegritätsbedingungen verwendet.
- Zwei Spaltenintegritätsbedingungen NOT NULL für die Tabelle distributors definieren, wobei es sich bei einer Spaltenintegritätsbedingung explizit um einen Namen handelt:
CREATE TABLE distributors ( did DECIMAL(3) CONSTRAINT no_null NOT NULL, name VARCHAR(40) NOT NULL );