ALTER TABLE-Anweisung (SQL, Oracle)

Mit der ALTER TABLE-Anweisung können nachträglich für eine bereits bestehende Tabelle? (CREATE TABLE) Spalten oder auch andere Optionen verändert, gelöscht oder hinzugefügt werden. Insbesondere können auch CONSTRAINTS nachträglich erzeugt und bearbeitet werden. Die Anweisung gehört zum Sprachumfang der SQL-DDL. Ein DDL-Befehl enthält immer ein AUTOCOMMIT und kann daher im Allgemeinen nicht mit ROLLBACK zurückgerollt werden.

Syntax der ALTER TABLE·Anweisung:

  <ALTER TABLE Anweisung (SQL, Oracle, Auszug)> ::=
   ALTER TABLE Tabellenname
         { ADD  { ( <Spaltendefinition> | <Tabellenbedingung > ) }
         | DROP { ( Spaltenname | CONSTRAINT Constraintname [CASCADE] ) }
         | MODIFY { ( <Spaltendefinition> | | <Tabellenbedingung> ) }
         | RENAME COLUMN alter_spaltenname TO neuer_spaltenname
         | <Aktivierungsklausel> };

   <Aktivierungsklausel (Oracle)> ::=
         [ { ENABLE | DISABLE } { ALL TRIGGERS
                                | UNIQUE (Spaltenname [, Spaltenname ]... )
                                | PRIMARY KEY
                                | CONSTRAINT Constraintname } ] 

Die <Spaltendefinition> ist wie bei der CREATE-TABLE·Anweisung definiert und kann auch einen zusätzlichen COLUMN-CONSTRAINT (Spaltenbedingung) enthalten. CASADE entfernt auch abhängige CONSTRAINTS.

Die ALTER TABLE-Anweisung ist nicht in jedem relationalen Datenbanksystem verfügbar und hat auch unterschiedliche Ausprägungen. Die ENABLE/DISABLE-Optionen und das MODIFY sind z.B. ORACLE-spezifisch und dienen dazu, TRIGGER oder CONSTRAINTS etc. zeitweise außer Kraft zu setzen oder wieder zu aktivieren. Die MODIFY-Option unterliegt recht strengen Grenzen, so kann z.B. eine Spalte nur NOT NULL werden, wenn es keine leeren Spalten gibt. Oder der Datentyp kann z.B. nicht von VARCHAR nach NUMERIC geändert werden, solange es auch nur einen Datensatz gibt, der nicht ausschließlich Zahlenwerte in der Spalte stehen hat. Es kann auch mittels ALTER TABLE... eine Spalte mit einem anderen Namen versehen werden. Dazu ist unter ORACLE SQL die RENAME-Klausel im ALTER-Befehl vorgesehen.

Die Syntax beim SQL-Standard ist sehr analog. Es gibt Klauseln zum Zufügen und Löschen von Spaltendefinitionen oder Tabellenbedingungen. Eine MODIFY-Klausel ist nicht zu finden und auch die Aktivierungsklausel nicht.

Beispiele:

  ALTER TABLE Teile ADD (Preis NUMBER);              -- Diese Anweisung fügt eine neue Spalte zur Teile-Tabelle hinzu. 

ALTER TABLE Teile DROP (Art); -- Diese Anweisung entfernt die Spalte "Art" aus der Tabellendefinition der Teile-Tabelle.

ALTER TABLE Auftraege ADD CONSTRAINT Auf_Pk PRIMARY KEY(AuftragsNr); -- Diese Anweisung legt einen Primärschlüssel für die Auftrags-Tabelle fest.

ALTER TABLE Artikel ADD CONSTRAINT Art_T_Fk FOREIGN KEY (TNr) -- Diese Anweisung legt einen Fremdschlüssel für die Artikel-Tabelle fest, REFERENCES Teile (TNr}; -- der auf die Spalte TNr in der Teile-Tabelle verweist.

ALTER TABLE Artikel -- Auf der Spalte Bezeichnung wird zusätzlich eine CONSTRAINT BEZ_NN MODIFY BEZEICHNUNG CONSTRAINT BEZ_NN NOT NULL; -- definiert, der dafür sorgt, dass die Bezeichnung keine NULL-Werte -- akzeptiert ALTER TABLE Artikel ADD CONSTRAINT TYPE_CHECK CHECK (TYPE IN ('Artikel', 'Material', 'Baugruppe')) -- Check-Constraint, der in der Spalte Type nur bestimmte -- Werte zulässt
ALTER TABLE Test RENAME COLUMN Spalte1 TO Spalte2; --Ändert den Namen von Spalte1 in Spalte2

siehe auch : CREATE TABLE, DROP TABLE, Namensraum

Quellen:

  • Quellen/Standards in http://www.wiscorp.com/SQLStandards.html und http://www.jcc.com/sql.htm
  • INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • Adams, Ralf: "SQL - Eine Einführung mit vertiefenden Exkursen", Hanser, München, 2012, ISBN 978-3-446-43200-0
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
  • Sieben, Jürgen: "Oracle® SQL - Das umfassende Handbuch", Galileo Press, 2012, ISBN 978-3-8362-1875-7
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2

Kategorie: SQL, A, T