Weiter Zurück [Inhalt] Online Suche im Handbuch

28.3 ALTER Table

ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

alter_specification:
          ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
  oder    ADD INDEX [index_name] (index_col_name,...)
  oder    ADD PRIMARY KEY (index_col_name,...)
  oder    ADD UNIQUE [index_name] (index_col_name,...)
  oder    ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  oder    CHANGE [COLUMN] old_col_name create_definition
  oder    MODIFY [COLUMN] create_definition
  oder    DROP [COLUMN] col_name
  oder    DROP PRIMARY KEY
  oder    DROP INDEX key_name
  oder    RENAME [AS] new_tbl_name
  oder    table_option

ALTER erlaubt es, die Struktur einer Tabelle vollständig zu verändern. Intern legt MySQL eine temporäre Kopie dieser Tabelle an, verändert die Struktur und kopiert die Daten wieder zurück. Bei großen Datenbanken kann dies erhebliche Zeit in Anspruch nehmen.


mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));

Um Tabelle von t1 nach t2 umzubenennen:


mysql> ALTER TABLE t1 RENAME t2;

Um z.B. eine INTEGER Spalte von a nach b umzubenennen:


mysql> ALTER TABLE t1 CHANGE a b INTEGER;

Um einen Spaltentyp zu verändern, ohne den Namen zu verändern:


mysql> ALTER TABLE t1 CHANGE b b INTEGER;

Ab Version 3.22.16a funktioniert auch folgende Syntax:


mysql> ALTER TABLE t1 MODIFY b INTEGER;

Um eine Spalte von INTEGER nach TINYINT NOT NULL zu konvertieren, und gleichzeitig Spalte b von CHAR(10) nach CHAR(20) unter Umbenennung von b nach c zu verändern:


mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);

Einfügen einer TIMESTAMP Spalte mit Namen d:


mysql> ALTER TABLE t2 ADD d TIMESTAMP;

Um einen Index an Spalte d anzufügen, und diese als primary key zu bestimmen:


mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);

Spalte c Löschen:


mysql> ALTER TABLE t2 DROP COLUMN c;

Hinzufügen einer AUTO_INCREMENT integer Spalte namens c:


mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
           ADD INDEX (c);

Man beachte, daß wir c indiziert haben, weil AUTO_INCREMENT Spalten zwangsläufig indiziert werden müssen. Wir erklären c als NOT NULL, weil indizierte Spalten nicht NULL sein dürfen.

Einige Dinge sollten Sie bei ALTER unbedingt beachten:


Weiter Zurück [Inhalt] Online Suche im Handbuch