Mit dieser Anweisung können Sie eine Tabellendefinition ändern oder eine Tabelle deaktivieren, damit sie an einer Replication Server-Replikation teilnehmen kann.
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
ALTER TABLE [ Eigentümer.]Tabellenname REPLICATE { ON | OFF }
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öschenWenn 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:
SET DEFAULT Standardwert Ändert den Standardwert einer bestehenden Spalte einer Tabelle. Sie können auch die MODIFY-Klausel für diese Aufgabe verwenden, aber ALTER ist SQL/92-fähig, MODIFY nicht. Das Ändern eines Standardwerts ändert keine bestehenden Werte in der Tabelle.
DROP DEFAULT Entfernt den Standardwert von einer bestehenden Spalte in einer Tabelle. Sie können auch die MODIFY-Klausel für diese Aufgabe verwenden, aber ALTER ist SQL/92-fähig, MODIFY nicht. Das Ändern eines Standardwerts ändert keine bestehenden Werte in der Tabelle.
ADD Fügt einer Spalte eine benannte Integritätsregel oder eine CHECK-Bedingung hinzu. Die neue Integritätsregel oder Bedingung betrifft nur Vorgänge in der Tabelle, die nach ihrer Definition ausgeführt werden. Die vorhandenen Werte in der Tabelle werden nicht daraufhin geprüft, ob sie der neuen Integritätsregel oder Bedingung entsprechen.
CONSTRAINT Spalten-Integritätsregel-Name Mit dem optionalen Spalten-Integritätsregel-Namen können Sie später einzelne Integritätsregeln ändern oder löschen, anstatt die gesamte Spalten-Integritätsregel zu löschen.
SET COMPUTE (Ausdruck) Ändert den Ausdruck, der einer berechneten Spalte zugeordnet wurde. Die Werte in der Spalte werden neu berechnet. Wenn der neue Ausdruck ungültig ist, schlägt die Anweisung fehl.
DROP COMPUTE Ändert eine berechnete Spalte in eine nicht berechnete Spalte. Diese Anweisung ändert keine bestehenden Werte in der Tabelle.
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.
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.
Eine der folgenden Bedingungen muss erfüllt sein:
Eigentümer der Tabelle
Benutzer mit DBA-Berechtigung
Ein Benutzer, der die Berechtigung ALTER für die Tabelle erhalten hat
ALTER TABLE erfordert exklusiven Zugriff auf die Tabelle.
Globale temporäre Tabellen können erst geändert werden, wenn alle Benutzer, welche die Tabelle referenzieren, ihre Verbindungen getrennt haben.
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.
SQL/92 Intermediate-Level-Funktion MODIFY ist nicht SQL/92-fähig.
SQL/99 ADD COLUMN ist eine Kernfunktion. Andere Klauseln sind Erweiterungen des Herstellers oder Implementierungen von bestimmten, benannten Erweiterungen zu SQL/99.
Sybase Einige Klauseln werden von Adaptive Server Enterprise unterstützt.
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.
SQL Anywhere Studio 9.0.1
Copyright © 1989–2004 Sybase Inc. Teil-Copyright © 2001–2004 iAnywhere Solutions Inc. Alle Rechte vorbehalten.