Collection Contents Zurück Weiter PDF

ASA SQL-Referenzhandbuch

SQL-Anweisungen

ALTER TABLE-Anweisung


Beschreibung 

Mit dieser Anweisung können Sie eine Tabellendefinition ändern oder eine Tabelle deaktivieren, damit sie an einer Replication Server-Replikation teilnehmen kann.

Syntax 1 

ALTER TABLE [ Eigentümer.]Tabellenname
add_Klausel | modify_Klausel | drop_Klausel | rename_Klausel }

add_Klausel :
   ADD { Spaltendefinition | Tabellen-Integritätsregel }
| { ADD PCTFREE Ganzzahl | PCTFREE DEFAULT }

modify_Klausel :
  MODIFY Spaltendefinition
MODIFY Spaltenname { DEFAULT Standardwert
   | [ NOT ] NULL
   | [ CONSTRAINT Integritätsregelname ]
         CHECK { NULL |  ( Neue_Bedingung ) } }
ALTER Spaltenname  Spaltenänderung
ALTER Identitätsregelname CHECK ( Neue_Bedingung )

drop_Klausel :
DELETE | DROP }{
    Spaltenname
   | CONSTRAINT Integritätsregelname
   | CHECK
   | UNIQUE ( Spaltenname, ... )
   | PRIMARY KEY
   | FOREIGN KEY Rollenname }

rename-Klausel :
  RENAME  Neuer_Tabellenname
RENAME Spaltenname TO Neuer_Spaltenname
RENAME Integritätsregelname TO Neuer_Integritätsrelgelname

Spaltendefinition:
Spaltenname Datentyp [ NOT NULL ] [ DEFAULT Standardwert ] [ Spalten_Integritätsregel ... ]

Tabellen-Integritätsregel:
CONSTRAINT Integritätsregelname ] {  UNIQUE ( Spaltenname, ... )
   | PRIMARY KEY [ CLUSTERED ] ( Spaltenname, ... )
   | Fremdschlüssel-Integritätsregel
   | CHECK ( Bedingung ) }

Spalten-Integritätsregel:
CONSTRAINT Integritätsregelname ] {  UNIQUE
  | PRIMARY KEY
  | REFERENCES Tabellenname
      [ ( Spaltenname ) ] [ Aktionen ] [ CLUSTERED ]
  | CHECK ( Bedingung ) }
COMPUTE ( Ausdruck )

Spaltenänderung :
  SET DEFAULT Standardwert
DROP DEFAULT
ADD [ CONSTRAINT Spalten_Integritätsregel_Name ] CHECK ( Bedingung )
| { DELETE | DROP } CONSTRAINT Spalten_Integritätsregel_Name
| { DELETE | DROP } CHECK
SET COMPUTE ( Ausdruck )
DROP COMPUTE

Standardwert:
 Spezialwert
Zeichenfolge
globale Variable
| [ - ] Zahl
( konstanter_Ausdruck )
integrierte_Funktion( konstanter_Ausdruck )
AUTOINCREMENT
GLOBAL AUTOINCREMENT [ ( Partitionsgröße ) ]
NULL
TIMESTAMP
UTC TIMESTAMP
LAST USER
USER

Spezialwert:
CURRENT { DATABASE | DATE
   | REMOTE USER | TIME
   | TIMESTAMP | UTC TIMESTAMP
   | USER | PUBLISHER }

Fremdschlüssel-Integritätsregel:
NOT NULL ] FOREIGN KEY [ Rollenname ] [ (Spaltenname, ... ) ]
REFERENCES Tabellenname [ (Spaltenname, ... ) ] [ CLUSTERED ]
Aktionen ] [ CHECK ON COMMIT ]

Aktionen:
ON UPDATE Aktion ] [ ON DELETE Aktion ]

Aktion:
CASCADE | SET NULL | SET DEFAULT | RESTRICT

Syntax 2 

ALTER TABLE [ Eigentümer.]Tabellenname REPLICATE { ON | OFF }

Parameter 

add-Klausel    Fügt einer Tabelle eine neue Spalte oder Tabellen-Integritätsregel hinzu. Weitere Hinweise finden Sie im Folgenden:

modify-Klausel    Eine einzelne Spaltendefinition ändern. Weitere Hinweise finden Sie im Folgenden:

drop-Klausel    Löscht eine Spalten- oder Tabellen-Integritätsregel. Weitere Hinweise finden Sie im Folgenden:

rename-Klausel    Ändert den Namen einer Tabelle, einer Spalte oder einer Integritätsregel. Weitere Hinweise finden Sie im Folgenden:

ADD Spaltendefinition    Fügt einer Tabelle eine neue Spalte hinzu.

Wenn die Spalte einen Standardwert hat, werden alle Zeilen der neuen Spalte mit diesem Standardwert gefüllt.

Adaptive Server Anywhere optimiert die Erstellung von Spalten, in denen NULL zugelassen ist. Die erste Spalte, in der NULL zugelassen ist, weist Platz für acht solche Spalten zu und initialisiert alle acht auf NULL. (Dafür ist kein zusätzlicher Speicherplatz notwendig.) Dadurch erfordert das Hinzufügen der nächsten sieben Spalten keine Änderungen an den Zeilen der Tabelle. Wenn eine neunte Spalte hinzugefügt wird, wird Platz für acht weitere dieser Spalten zugewiesen und jede Zeile der Tabelle so geändert, dass der zusätzliche Platzbedarf zugewiesen werden kann.

ADD Tabellen-Integritätsregel    Fügt einer Tabelle eine Integritätsregel hinzu. Eine umfassende Erklärung der Tabellen-Integritätsregeln finden Sie unter CREATE TABLE-Anweisung.

Wenn PRIMARY KEY angegeben ist, darf die Tabelle noch keinen Primärschlüssel besitzen, der mit der Anweisung CREATE TABLE oder einer weiteren ALTER TABLE-Anweisung erstellt wurde.

Mit dem optionalen Integritätsregelnamen können Sie später einzelne Integritätsregeln ändern oder löschen, anstatt die gesamte Tabellen-Integritätsregel zu löschen.

Tabellen-CHECK-Integritätsregeln schlagen nur dann fehl, wenn der Wert FALSE zurückgegeben wird. Wenn der Wert UNKNOWN lautet, ist die Änderung erlaubt.

PCTFREE    Geben Sie den Prozentsatz des Speicherplatzes an, den Sie für jede Tabellenseite reservieren möchten. Der freie Speicherplatz wird für Zeilen verwendet, die bei der Datenaktualisierung größer werden. Wenn auf einer Tabellenseite kein freier Speicherplatz verfügbar ist, führt jede Vergrößerung einer Zeile dieser Seite zu einer Aufteilung der Zeile auf mehrere Tabellenseiten, was Zeilenfragmentierung und möglichen Performanceverlust nach sich zieht.

Ein Prozentsatz für freien Speicherplatz von 0 bedeutet, dass auf den einzelnen Seiten kein freier Platz bleiben soll, die Seiten werden vollständig gefüllt. Ein hoher Prozentsatz hat zur Folge, dass jede einzelne Zeile auf eine eigene Seite eingefügt wird. Wenn PCTFREE nicht gesetzt oder DEFAULT angegeben ist, werden 200 Byte auf jeder Seite reserviert.

Wenn PCTFREE gesetzt ist, verwenden alle folgenden Einträge in die Tabellenseiten den neuen Wert, bereits eingefügte Zeilen werden davon jedoch nicht beeinflusst. Der Wert bleibt bestehen, bis er geändert oder die Tabelle gelöscht wird.

Die Angabe von PCTFREE kann für Basistabellen, globale oder lokale temporäre Tabellen verwendet werden. Abgesehen von den temporären Tabellen wird der Wert für PCTFREE in der Systemtabelle SYSATTRIBUTE gespeichert.

Weitere Hinweise finden Sie unter SYSATTRIBUTE-Systemtabelle.

MODIFY Spaltendefinition    Ändert die Länge oder den Datentyp einer bestehenden Spalte einer Tabelle. Wenn NOT NULL angegeben ist, wird der benannten Spalte eine NOT NULL-Integritätsregel hinzugefügt. Sonst wird die NOT NULL-Integritätsregel für die Spalte nicht geändert. Wenn nötig werden die Daten in der geänderten Spalte in einen neuen Datentyp konvertiert. Wenn ein Konvertierungsfehler auftritt, schlägt der Vorgang fehl und die Tabelle bleibt unverändert.

Eine Spalte kann nicht in eine berechnete Spalte umgeändert werden. Berechnete Spalten können lediglich hinzugefügt oder gelöscht werden.

Einen Index, eine Integritätsregel oder einen Schlüssel löschen 
Wenn die Spalte in einer Eindeutigkeits-Integritätsregel, einem Fremdschlüssel oder einem Primärschlüssel enthalten ist, muss die Integritätsregel oder der Schlüssel gelöscht werden, bevor die Spalte geändert werden kann. Wird ein Primärschlüssel gelöscht, dann werden auch alle Fremdschlüssel gelöscht, welche die Tabelle referenzieren.

Sie können eine Tabellen- oder Spaltenintegritätsregel nicht mit MODIFY ändern. Wenn Sie eine Integritätsregel ändern möchten, löschen Sie die alte Integritätsregel mit DELETE und fügen die neue Integritätsregel mit ADD hin.

MODIFY Spaltenname DEFAULT Standardwert    Ändert den Standardwert einer bestehenden Spalte einer Tabelle. Um einen Standardwert für eine Spalte zu entfernen, müssen Sie DEFAULT NULL angeben. Das Ändern eines Standardwerts ändert keine bestehenden Werte in der Tabelle.

ALTER Spaltenname Spaltenänderung    Ändert die Definition einer Spalte. Folgende Änderungen sind zulässig:

MODIFY Spaltenname [ NOT ] NULL    Ändert die Integritätsregel NOT NULL auf eine Spalte, um NULL-Werte in der Spalte zuzulassen oder zu unterbinden.

MODIFY Spaltenname CHECK NULL    Löscht die Prüf-Integritätsregel für eine Spalte. Diese Anweisung kann nicht für Datenbanken benutzt werden, die mit einer Vorgängerversion der Version 5.0 erstellt wurden.

MODIFY Spaltenname CHECK (Bedingung)    Ersetzt die bestehende CHECK-Bedingung für die Spalten durch die angegebene. Diese Anweisung kann nicht für Datenbanken benutzt werden, die mit einer Vorgängerversion der Version 5.0 erstellt wurden.

DELETE Spaltenname    Löscht die Spalte aus der Tabelle. Wenn die Spalte in einem Index, einer Eindeutigkeits-Integritätsregel, einem Fremdschlüssel oder Primärschlüssel enthalten ist, muss der Index, die Integritätsregel oder der Schlüssel gelöscht werden, bevor die Spalte gelöscht werden kann. Dadurch werden die CHECK-Integritätsregeln, welche diese Spalte referenzieren, nicht gelöscht.

DELETE Integritätsregelname    Löscht die genannte Integritätsregel aus der Tabellendefinition.

DELETE CHECK    Löscht alle Check-Integritätsregeln der Tabelle. Sowohl Check-Integritätsregeln für Tabellen als auch für Spalten werden gelöscht.

DELETE UNIQUE (Spaltenname, ...)    Löscht eine Eindeutigkeits-Integritätsregel auf dieser Tabelle. Alle Fremdschlüssel, die diese Eindeutigkeits-Integritätsregel (und nicht den Primärschlüssel) referenzieren, werden ebenfalls gelöscht.

DELETE PRIMARY KEY    Löscht die Primärschlüssel-Integritätsregel auf dieser Tabelle. Alle Fremdschlüssel, die den Primärschlüssel für diese Tabelle referenzieren, werden ebenfalls gelöscht.

DELETE FOREIGN KEY Rollenname    Löscht die Fremdschlüssel-Integritätsregel auf der Tabelle mit dem angegebenen Rollennamen.

RENAME neuer-Tabellennane    Ändert den Namen einer Tabelle in neuer_Tabellenname. Beachten Sie, dass alle Anwendungen, die den alten Tabellennamen benutzen, ebenfalls geändert werden müssen. Auch alle Fremdschlüssel, denen automatisch derselbe Name wie jener der alten Tabelle zugeordnet wurde, ändern die Namen nicht.

RENAME Spaltenname TO neuer_Spaltenname    Ändert den Namen der Spalte in neuer_Spaltenname. Beachten Sie, dass alle Anwendungen, die den alten Spaltennamen benutzen, ebenfalls geändert werden müssen.

Verwendung 

Syntax 1    Die ALTER TABLE-Anweisung ändert Tabellenattribute (Spaltendefinitionen, Integritätsregeln) in einer zuvor erstellten Tabelle. Beachten Sie, dass die Syntax eine Liste von Alter-Klauseln ermöglicht, jedoch kann in einer ALTER TABLE-Anweisung lediglich eine Tabellen- oder eine Spalten-Integritätsregel hinzugefügt, geändert oder gelöscht werden. Eine Tabelle kann nicht in ein und derselben Anweisung hinzugefügt und geändert werden.

ALTER TABLE kann nicht für eine lokale, temporäre Tabelle verwendet werden.

ALTER TABLE wird verhindert, wenn die Anweisung eine Tabelle betrifft, die währenddessen von einer anderen Verbindung benutzt wird. ALTER TABLE kann zeitaufwändig sein. Der Server verarbeitet während der Anweisungsverarbeitung keine Anforderungen, welche die Tabelle referenzieren.

Weitere Hinweise zur Verwendung der Option CLUSTERED finden Sie unter Clustered-Indizes verwenden.

Vor Version 5.0 waren alle Tabellen- und Spalten-Integritätsregeln in einer einzigen Tabellen-Integritätsregel enthalten. Daher können bei diesen Datenbanken einzelne Integritätsregeln auf Spalten weder mit der Klausel MODIFY Spaltenname CHECK NULL gelöscht noch mit der Klausel MODIFY Spaltenname CHECK (Bedingung) ersetzt werden. Sollen diese Anweisungen verwendet werden, muss die gesamte Tabellen-Integritätsregel gelöscht und die Integritätsregeln wieder mit der Klausel MODIFY Spaltenname CHECK (Bedingung) hinzugefügt werden. An dieser Stelle können Sie MODIFY CHECK verwenden.

Syntax 2    Wenn bei einer Tabelle REPLICATE ON eingestellt ist, werden alle Änderungen an der Tabelle zur Replikation an den Replication Server übertragen. Im Replication Server wird mithilfe der Replikationsdefinitionen entschieden, welche Tabellenänderungen zu den anderen Rechnern übertragen werden. Im restlichen Teil dieses Abschnittes wird Syntax 1 beschrieben.

Berechtigungen 

Eine der folgenden Bedingungen muss erfüllt sein:

Globale temporäre Tabellen können erst geändert werden, wenn alle Benutzer, welche die Tabelle referenzieren, ihre Verbindungen getrennt haben.

Nebenwirkungen 

Automatisches Festschreiben (Autocommit).

Die Optionen MODIFY und DELETE (DROP) schließen alle Cursor für die aktuelle Verbindung.

Ein Checkpoint wird zu Beginn des ALTER TABLE-Vorgangs ausgeführt.

Sobald Sie eine Spalte oder Tabelle ändern, hören alle gespeicherten Prozeduren, Ansichten oder andere Elemente, welche die geänderte Spalte referenzieren, zu funktionieren auf.

Siehe auch 
Standards und Kompatibilität 
Beispiel 

Hinzufügen einer neuen Spalte in die Tabelle employee, aus der zu ersehen ist, wer in welchem Büro arbeitet.

ALTER TABLE employee
ADD office CHAR(20) DEFAULT 'Boston'

Mit dem folgenden Beispiel können Sie die Spalte "office" aus der Tabelle employee löschen.

ALTER TABLE employee
DELETE office

Die Adressenspalte in der Tabelle "customer" kann gegenwärtig bis zu 35 Zeichen enthalten. Damit sie bis zu 50 Zeichen enthalten kann, geben Sie Folgendes ein.

ALTER TABLE customer
MODIFY address CHAR(50)

Mit dem folgenden Beispiel wird eine Spalte in die Tabelle "customer" eingefügt, wobei jedem Kunden ein "sales contact" (Ansprechpartner) zugewiesen wird.

ALTER TABLE customer
ADD sales_contact INTEGER
REFERENCES employee (emp_id)
ON UPDATE CASCADE
ON DELETE SET NULL

Dieser Fremdschlüssel wurde mit kaskadierenden Aktualisierungen konstruiert und wird bei Löschungen auf den NULL-Wert gesetzt. Wenn sich die Mitarbeiter-Kennung eines Angestellten ändert, wird die Spalte aktualisiert, um diese Änderung widerzuspiegeln. Wenn ein Angestellter das Unternehmen verlässt und seine Kennung gelöscht wird, wird die Spalte auf den NULL-Wert gesetzt.


Collection Contents Zurück Weiter PDF