IBM PureData System for Analytics, Version 7.1

ALTER TABLE

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.

Mit dem ALTER-Befehl können Sie Folgendes ausführen:
  • Spaltenstandardwert ändern oder löschen. Von Ihnen festgelegte Standardwerte gelten nur für nachfolgende INSERT-Befehle, nicht für bereits in der Tabelle vorhandene Zeilen.
  • Spalte oder Tabelle umbenennen, ohne den Datentyp oder die Datengröße in der Spalte oder Tabelle zu ändern. Sie können die Schlüsselwortspalte übergehen.
  • Tabellen- oder Spaltenintegritätsbedingung hinzufügen oder löschen. Sie können eine Integritätsbedingung nicht ändern. Sie müssen die Integritätsbedingung stattdessen löschen und eine neue erstellen.
  • Länge einer VARCHAR-Spalte ändern.

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.

Syntax

Syntax für das Ändern einer Tabelle
ALTER TABLE <Tabelle> <Aktion> [ORGANIZE ON {(<Spalten>) | NONE}]
Dabei kann <Aktion> für eine der folgenden Aktionen stehen:
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> 
Dabei steht <Spaltenintegritätsbedingung> für Folgendes:
[ CONSTRAINT <Integritätsbedingungsname> ] 
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <Wert> | <Referenz>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
Dabei steht <Tabellenintegritätsbedingung> für Folgendes:
[ 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 ]
Dabei steht <Referenz> für Folgendes:
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} ]

Eingaben

Der ALTER TABLE-Befehl akzeptiert folgende Eingaben:

Tabelle 1. Eingaben für ALTER TABLE
Eingabe Beschreibung
<Tabelle> Der Name der zu ändernden Tabelle.
<Aktion> Die Aktion, die für die angegebene Tabelle ausgeführt werden soll:
ADD COLUMN
Spalte hinzufügen. Diese Eingabe kann nicht in einem Transaktionsblock angegeben werden.
ADD <Tabellenintegritätsbedingung>
Tabellenintegritätsbedingung hinzufügen.
ALTER [COLUMN]
Spaltenstandardwert ändern oder löschen.
DROP [COLUMN]
Spalte löschen. Alle auf der gelöschten Spalte beruhenden Integritätsbedingungen werden ebenfalls automatisch gelöscht. Diese Eingabe kann nicht in einem Transaktionsblock angegeben werden. Sie können weder eine Verteilungsspalte, noch Spalte ORGANIZE ON oder die letzte verbleibende Spalte in einer Tabelle löschen.

Wenn Sie eine Spalte löschen und ihren Namen wiederverwenden wollen, müssen Sie zunächst den Befehl GROOM TABLE <Tabellenname> VERSIONS ausführen; andernfalls könnten Fehler auftreten.

DROP CONSTRAINT
Integritätsbedingung löschen.
MODIFY COLUMN
Spaltenlänge ändern.
OWNER TO
Tabelleneigner ändern.
RENAME [COLUMN]
Spalte umbenennen.
RENAME TO
Tabelle umbenennen. Wenn Sie den Namen einer Tabelle ändern, funktionieren alle auf der Tabelle basierenden Ansichten nicht mehr, da bei Ansichten mit Namensbindung gearbeitet wird.
SET PRIVILEGES TO
Berechtigungen der geänderten Tabelle auf die Berechtigungen einer anderen Tabelle setzen.
<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:
NO ACTION
Setzt einen Fehler ab, wenn der Fremdschlüssel verletzt wird. Dies ist der Standardwert.
RESTRICT
Entspricht NO ACTION.
CASCADE
Löscht alle Zeilen, die die gelöschte Zeilen referenzieren.
SET NULL
Setzt die Werte der referenzierenden Spalten auf die Standardwerte.
SET DEFAULT
Setzt die Werte der referenzierenden Spalten auf die Standardwerte.

Ausgaben

Der ALTER TABLE-Befehl erstellt die folgenden Ausgaben:

Tabelle 2. Ausgaben von ALTER TABLE
Ausgabe Beschreibung
ALTER Der Befehl war erfolgreich.
ERROR Die angegebene Tabelle oder Spalte ist nicht verfügbar.

Berechtigungen

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.

Verwendung

Es folgen Verwendungsbeispiele:
  • Standardwert aus einer Spalte löschen:
    MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
    DEFAULT;
  • VARCHAR-Länge für eine Spalte ändern:
    MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
  • Namen einer Spalte ändern:
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
    city;
  • Namen einer Tabelle ändern:
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
  • Tabelleneigner ändern:
    MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
  • Berechtigungen in die Berechtigungen ändern, die für eine andere Tabelle festgelegt sind:
    MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
  • Integritätsbedingung hinzufügen:
    MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
    PRIMARY KEY(col1) INITIALLY IMMEDIATE;
  • Integritätsbedingung löschen:
    MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
    CASCADE;


Feedback | Copyright IBM Corporation 2014 | Letzte Aktualisierung: 2014-02-28