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.
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 unterstützt Integritätsbedingungsprüfungen nicht; wenn Sie Integritätsbedingungen angeben, müssen Sie selbst die Überprüfung der Integritätsbedingungen und der referenziellen Integrität ausführen.)
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.
CREATE TABLE <Tabellenname> [ ( <Spalte>[,<Spalte>… ] ) ] AS
<Auswahlklausel> [ DISTRIBUTE ON [HASH] ( <Spalte>[<Spalte>,… ] ) ]
Die distribute on-Phrase gibt den Verteilungsschlüssel an, das Wort hash ist optional.
CREATE TABLE <Tabellenname> (col1 int, col2 int, col3 int)
DISTRIBUTE ON RANDOM;
Die distribute on random-Phrase gibt die Umlaufverteilung an.
CREATE TABLE <Tabellenname> (col1 int, col2 int, col3 int);
Das Netezza-System wählt einen Verteilungsschlüssel aus. Es gibt keine Möglichkeit, zu verifizieren, um welchen Schlüssel es sich handelt, und der Schlüssel kann abhängig vom Netezza-Software-Release variieren.
CREATE [ TEMPORARY | TEMP ] TABLE <Tabelle>
( <Spalte> <Typ> [<Spaltenintegritätsbedingung>][,<Spalte> <Typ>
[<Spaltenintegritätsbedingung>]…] [<Tabellenintegritätsbedingung>
[,<Tabellenintegritätsbedingung>… ] )
[ DISTRIBUTE ON { RANDOM | [HASH] (<Spalte>[,<Spalte>…]) } ]
[ ORGANIZE ON { (<Spalte>) | NONE } ]
[ ROW SECURITY ]
[ CONSTRAINT <Integritätsbedingungsname> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <Wert> | <Referenz>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
[ CONSTRAINT <Integritätsbedingungsname> ]
{UNIQUE (<Spalte>[,<Spalte>…] ) |
PRIMARY KEY (<PS-Spaltenname>[,<PS-Spaltenname>…] ) |
FOREIGN KEY (<FS-Spaltenname>[,<FS-Spaltenname>…] ) <Referenz>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
REFERENCES <Reftabelle> [ (<Refspaltenname>[,<Refspaltenname>…] ) ]
[ 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 IBM® Netezza-System unterstützt weder Integritätsbedingungsprüfungen noch referenzielle Integrität. Der Benutzer muss Integritätsbedingungsprüfungen und referenzielle Integrität sicherstellen.
| Eingabe | Beschreibung |
|---|---|
| TEMP[ORARY] | Die zu erstellende Tabelle soll eine temporäre Tabelle sein. |
| <Tabelle> | Der Name der zu erstellenden Tabelle. |
| <Spalte> | Der Name einer Spalte, die in der neuen Tabelle erstellt werden soll. |
| <Typ> | 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 die Tabelle keine materialisierten Ansichten haben und alle angegebenen Spaltendatentypen müssen in einer Zonenmap dargestellt werden können. Die Tabellendatenumorganisation tritt in Kraft, wenn GROOM TABLE ausgeführt wird. Weitere Informationen finden Sie in IBM Netezza Systemverwaltung im Abschnitt zur Verwendung von Clusterbasistabellen. |
| ROW SECURITY | Tabelle mit Sicherheit auf Zeilenebene erstellen. |
| <Integritätsbedin- gungsname> |
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 unterstützt die Überprüfung der Integritätsbedingungen und referenzielle Integrität nicht.) |
| 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ätsbe- dingung) |
Gibt an, ob jeder Wert in der Spalte eindeutig sein muss. |
| PRIMARY KEY (Spalten- und Tabellen- integritä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äts- bedingung) |
Der Standardwert, der in jede Zeile dieser Spalte gestellt werden soll. |
| REFERENCES (Spaltenintegritäts- bedingung) |
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äts- bedingung) |
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 der Standardwert. 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:
|
Der Befehl hat die folgenden Ausgaben:
| 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 Fehlernachricht enthält beschreibenden Text, z. B. ERROR: Relation 'Tabelle' already exists. |
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.
Es folgen Verwendungsbeispiele:
MYDB.SCH1(USER)=>
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
);
MYDB.SCH1(USER)=>
CREATE TABLE Name (
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)
);
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3),
name CHAR VARYING(40),
PRIMARY KEY(did)
);
MYDB.SCH1(USER)=> 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.
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3) CONSTRAINT no_null NOT NULL,
name VARCHAR(40) NOT NULL
);