Mit dem ALTER TABLE-Befehl können Sie die Struktur einer vorhandenen Tabelle ändern. Wenn die Tabelle gerade von einer aktiven Abfrage verwendet wird, wartet der ALTER-Befehl, bis die betreffende Abfrage abgeschlossen ist.
Wenn eine Tabelle von einer gespeicherten Prozedur referenziert wird, ist das Hinzufügen oder Löschen einer Spalte nicht zulässig. Sie müssen zunächst die gespeicherte Prozedur löschen, bevor Sie den ALTER TABLE-Befehl ausführen, und anschließend nach der Änderung der Tabelle die gespeicherte Prozedur erneut erstellen.
ALTER TABLE <Tabelle> <Aktion> [ORGANIZE ON {(<Spalten>) | NONE}]
ADD COLUMN <Spalte> <Typ> [<Spaltenintegritätsbedingung>][,…] |
ADD <Tabellenintegritätsbedingung> |
ALTER [COLUMN] <Spalte> { SET DEFAULT <Wert> | DROP DEFAULT } |
DROP [COLUMN] Spaltenname[,Spaltenname…] {CASCADE | RESTRICT } |
DROP CONSTRAINT <Integritätsbedingungsname> {CASCADE | RESTRICT} |
MODIFY COLUMN (<Spalte> VARCHAR(<maximale_Größe>)) |
OWNER TO <Benutzername> |
RENAME [COLUMN] <Spalte> TO <neuer_Spaltenname> |
RENAME TO <neue_Tabelle> |
SET PRIVILEGES TO <Tabelle>
[ 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} ]
Der ALTER TABLE-Befehl akzeptiert folgende Eingaben:
| Eingabe | Beschreibung |
|---|---|
| <Tabelle> | Der Name der zu ändernden Tabelle. |
| <Aktion> | Die Aktion, die für die angegebene Tabelle ausgeführt werden soll:
|
| <Spalte> | Der Name einer Spalte. |
| <Benutzername> | Der Name eines Benutzers. |
| <neuer_Spaltenname> | Der für eine Spalte neu zu vergebende Name. |
| <neue_Tabelle> | Der neue Name der Tabelle. |
| ORGANIZE ON | Spalten (von eins bis vier), nach denen 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 in IBM Netezza Systemverwaltung im Abschnitt zur Verwendung von Clusterbasistabellen. |
| <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 Tabelleninte- gritätsbedingung) |
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 ALTER TABLE-Befehl erstellt die folgenden Ausgaben:
| Ausgabe | Beschreibung |
|---|---|
| ALTER | Der Befehl war erfolgreich. |
| ERROR | Die angegebene Tabelle oder Spalte ist nicht verfügbar. |
Sie müssen der Benutzer mit Administratorberechtigung, der Tabelleneigner oder der Eigner der Datenbank oder des Schemas sein, in der/dem die Tabelle definiert ist, oder Ihr Konto muss über Änderungsberechtigung für die Tabelle oder für die Tabellenobjektklasse verfügen. Wenn Sie den Eigner der Tabelle ändern, müssen Sie über Auflistungszugriff für das Benutzerkonto verfügen.
MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
DEFAULT;
MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
city;
MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
PRIMARY KEY(col1) INITIALLY IMMEDIATE;
MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
CASCADE;