ALTER [IGNORE] TABLEtbl_name
alter_specification
[,alter_specification
] ...alter_specification
: ADD [COLUMN]column_definition
[FIRST | AFTERcol_name
] | ADD [COLUMN] (column_definition
,...) | ADD INDEX [index_name
] [index_type
] (index_col_name
,...) | ADD [CONSTRAINT [symbol
]] PRIMARY KEY [index_type
] (index_col_name
,...) | ADD [CONSTRAINT [symbol
]] UNIQUE [INDEX] [index_name
] [index_type
] (index_col_name
,...) | ADD FULLTEXT [INDEX] [index_name
] (index_col_name
,...) [WITH PARSERparser_name
] | ADD SPATIAL [INDEX] [index_name
] (index_col_name
,...) | ADD [CONSTRAINT [symbol
]] FOREIGN KEY [index_name
] (index_col_name
,...) [reference_definition
] | ALTER [COLUMN]col_name
{SET DEFAULTliteral
| DROP DEFAULT} | CHANGE [COLUMN]old_col_name
column_definition
[FIRST|AFTERcol_name
] | MODIFY [COLUMN]column_definition
[FIRST | AFTERcol_name
] | DROP [COLUMN]col_name
| DROP PRIMARY KEY | DROP INDEXindex_name
| DROP FOREIGN KEYfk_symbol
| DISABLE KEYS | ENABLE KEYS | RENAME [TO]new_tbl_name
| ORDER BYcol_name
| CONVERT TO CHARACTER SETcharset_name
[COLLATEcollation_name
] | [DEFAULT] CHARACTER SETcharset_name
[COLLATEcollation_name
] | DISCARD TABLESPACE | IMPORT TABLESPACE |table_options
|partition_options
| ADD PARTITIONpartition_definition
| DROP PARTITIONpartition_names
| COALESCE PARTITIONnumber
| REORGANIZE PARTITIONpartition_names
INTO (partition_definitions
) | ANALYZE PARTITIONpartition_names
| CHECK PARTITIONpartition_names
| OPTIMIZE PARTITIONpartition_names
| REBUILD PARTITIONpartition_names
| REPAIR PARTITIONpartition_names
ALTER TABLE
ermöglicht Ihnen das Ändern der
Struktur einer vorhandenen Tabelle. Sie können beispielsweise
Spalten hinzufügen oder entfernen, Indizes erstellen oder
löschen, den Typ einer vorhandenen Spalte ändern oder Spalten
oder die Tabelle umbenennen. Ferner können Sie den Kommentar
für die Tabelle und auch den Tabellentyp modifizieren.
Die Syntax für viele der zulässigen Änderungen ähnelt
Klauseln der CREATE TABLE
-Anweisung. Hierzu
gehören table_options
-Modifikationen
für Optionen wie ENGINE
,
AUTO_INCREMENT
und
AVG_ROW_LENGTH
. (Allerdings ignoriert
ALTER TABLE
die Tabellenoptionen
DATA DIRECTORY
und INDEX
DIRECTORY
.) Abschnitt 13.1.5, „CREATE TABLE
“, listet
alle Tabellenoptionen auf.
Bei manchen Operationen kann eine Warnung erzeugt werden, wenn
diese auf eine Tabelle angewendet werden sollen, deren
Speicher-Engine die Operation nicht unterstützt. Diese
Warnungen lassen sich mit SHOW WARNINGS
anzeigen. Siehe auch Abschnitt 13.5.4.25, „SHOW WARNINGS
“.
ALTER TABLE
erstellt zunächst eine
temporäre Kopie der Ursprungstabelle. Die Änderung wird dann
an der Kopie vorgenommen, und schließlich wird die
Originaltabelle gelöscht und die Kopie entsprechend umbenannt.
Während der Ausführung von ALTER TABLE
kann
die Originaltabelle von anderen Clients gelesen werden.
Änderungs- und Schreiboperationen in der Tabelle werden
blockiert, bis die neue Tabelle bereit ist, und dann automatisch
in die neue Tabelle umgeleitet. Aktualisierungen schlagen nicht
fehl.
Beachten Sie, dass, wenn Sie eine andere ALTER
TABLE
-Option als RENAME
verwenden,
MySQL immer eine Temporärtabelle erstellt – und zwar auch
dann, wenn die Daten strenggenommen nicht kopiert werden
müssten (z. B. wenn Sie nur den Namen einer Spalte ändern).
Bei MyISAM
-Tabellen ist die Neuerstellung des
Indexes der zeitaufwändigste Teil des Änderungsvorgangs. Sie
können diesen beschleunigen, indem Sie die Systemvariable
myisam_sort_buffer_size
auf einen hohen Wert
setzen.
Um ALTER TABLE
zu verwenden, benötigen
Sie die Berechtigungen ALTER
,
INSERT
und CREATE
für
die Tabelle.
IGNORE
ist eine MySQL-Erweiterung zum
SQL-Standard. Sie steuert, wie ALTER
TABLE
funktioniert, wenn Dubletten eindeutiger
Schlüssel in der neuen Tabelle vorhanden sind oder (bei
aktiviertem striktem Modus) Warnungen auftreten. Wenn
IGNORE
nicht angegeben ist, wird der
Vorgang bei Auftreten von Schlüsseldubletten abgebrochen,
und ein Rollback wird durchgeführt. Ist
IGNORE
angegeben, dann wird nur der erste
von mehreren Datensätzen mit Dubletten eindeutiger
Schlüssel verwendet. Die übrigen betroffenen Datensätze
werden gelöscht. Falsche Werte werden auf den
nächstliegenden zulässigen Wert gesetzt.
Sie können mehrere ADD
-,
ALTER
-, DROP
- und
CHANGE
-Klauseln in einer ALTER
TABLE
-Anweisung angeben. Diese werden durch
Kommata getrennt. Dies ist eine MySQL-Erweiterung zum
SQL-Standard, der nur jeweils eine dieser Klauseln je
ALTER TABLE
-Anweisung zulässt. Um
beispielsweise mehrere Spalten mit einer einzelnen Anweisung
zu löschen, tun Sie Folgendes:
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
CHANGE
, col_name
DROP
und
col_name
DROP INDEX
sind MySQL-Erweiterungen zum
SQL-Standard.
MODIFY
ist eine Oracle-Erweiterung zu
ALTER TABLE
.
Das Wort COLUMN
ist optional und darf
weggelassen werden.
Wenn Sie ALTER TABLE
ohne
zusätzliche Optionen sehen, benennt MySQL alle Dateien, die
der Tabelle tbl_name
RENAME TO
new_tbl_name
tbl_name
entsprechen,
einfach um. Es ist nicht notwendig, eine Temporärtabelle zu
erstellen. (Sie können zum Umbenennen von Tabellen auch die
Anweisung RENAME TABLE
verwenden. Siehe
auch Abschnitt 13.1.9, „RENAME TABLE
“.)
column_definition
-Klauseln
verwenden dieselbe Syntax für ADD
und
CHANGE
wie bei CREATE
TABLE
. Beachten Sie, dass diese Syntax den
Spaltennamen (und nicht nur den Datentyp) enthält. Siehe
auch Abschnitt 13.1.5, „CREATE TABLE
“.
Sie können eine Spalte mithilfe einer CHANGE
-Klausel
umbenennen. Zu diesem Zweck geben Sie den alten und den
neuen Spaltennamen sowie den Typ an, den die Spalte zurzeit
hat. Um beispielsweise eine
old_col_name
column_definition
INTEGER
-Spalte von a
zu b
umzubenennen, geben Sie Folgendes
ein:
ALTER TABLE t1 CHANGE a b INTEGER;
Wenn Sie den Typ einer Spalte, nicht aber ihren Namen
ändern wollen, erfordert die
CHANGE
-Syntax trotzdem einen alten und
neuen Spaltennamen, auch wenn diese dann identisch sind. Zum
Beispiel:
ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
Sie können den Spaltentyp auch mit
MODIFY
ändern, ohne die Spalte
umzubenennen:
ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
Wenn Sie CHANGE
oder
MODIFY
zum Kürzen einer Spalte
verwenden, für die ein Index vorhanden ist, und die Länge
der Spalte nach der Operation geringer ist als die
Indexlänge, dann kürzt MySQL den Index automatisch.
Ändern Sie einen Datentyp mit CHANGE
oder MODIFY
, dann versucht MySQL,
vorhandene Spaltenwerte bestmöglich in den neuen Typ zu
konvertieren.
Um eine Spalte an eine bestimmte Position in einer
Tabellenzeile hinzuzufügen, verwenden Sie
FIRST
oder AFTER
.
Standardmäßig werden neue Spalten am Ende eingefügt. Sie
können col_name
FIRST
und
AFTER
auch bei CHANGE
-
oder MODIFY
-Operationen verwenden.
ALTER ... SET DEFAULT
oder ALTER
... DROP DEFAULT
geben einen neuen Vorgabewert
für eine Spalte an bzw. entfernen den vorhandenen
Vorgabewert. Wenn die alte Vorgabe entfernt wird und die
Spalte NULL
werden kann, dann wird
NULL
zum neuen Vorgabewert. Kann die
Spalte nicht NULL
werden, dann weist
MySQL einen Standardwert zu (siehe auch
Abschnitt 11.1.4, „Vorgabewerte von Datentypen“).
DROP INDEX
entfernt einen Index. Dies ist
eine MySQL-Erweiterung zum SQL-Standard. Siehe auch
Abschnitt 13.1.7, „DROP INDEX
“.
Wenn Spalten aus einer Tabelle entfernt werden, werden die Spalten auch aus allen Indizes gelöscht, deren Bestandteil sie sind. Wenn alle Spalten, die einen Index bilden, gelöscht wurden, dann wird auch der Index gelöscht.
Enthält eine Tabelle nur eine Spalte, dann kann diese nicht
gelöscht werden. Zur Entfernung der Tabelle verwenden Sie
stattdessen DROP TABLE
.
DROP PRIMARY KEY
löscht den
Primärschlüssel. Hinweis: Bei
älteren MySQL-Versionen löscht DROP PRIMARY
KEY
, wenn kein Primärindex vorhanden ist, den
ersten eindeutigen Index in der Tabelle. Dies trifft bei
MySQL 5.1 nicht mehr zu: Wenn Sie hier
DROP PRIMARY KEY
auf eine Tabelle ohne
Primärschlüssel anzuwenden versuchen, erhalten Sie einen
Fehler.
Wenn Sie einer Tabelle mit UNIQUE INDEX
oder PRIMARY KEY
einen eindeutigen Index
bzw. einen Primärschlüssel hinzufügen, wird dieser vor
jedem nichteindeutigen Index gespeichert, sodass MySQL
Schlüsseldubletten schnellstmöglich erkennt.
ORDER BY
erlaubt Ihnen die Erstellung
einer neuen Tabelle mit allen Datensätzen in einer
bestimmten Reihenfolge. Beachten Sie, dass diese Reihenfolge
nach Einfüge- und Löschoperationen nicht aufrechterhalten
wird. Diese Option ist in erster Linie nützlich, wenn Sie
wissen, dass die Datensätze meistens in einer bestimmten
Reihenfolge abgefragt werden. Wenn Sie diese Option nach
umfangreicheren Änderungen in der Tabelle verwenden,
können Sie die Leistung unter Umständen steigern. In
bestimmten Fällen kann es MySQL das Sortieren erleichtern,
wenn die Tabelle in der Reihenfolge der Spalte angeordnet
ist, nach der Sie sie später auch sortieren wollen.
Wenn Sie ALTER TABLE
auf eine
MyISAM
-Tabelle anwenden, werden alle
nichteindeutigen Indizes in einer separaten Stapeloperation
erstellt (wie bei REPAIR TABLE
). Dies
sollte ALTER TABLE
erheblich
beschleunigen, wenn Sie viele Indizes haben.
Die Funktion lässt sich explizit aktivieren. ALTER
TABLE ... DISABLE KEYS
weist MySQL an, die
Aktualisierung nichteindeutiger Indizes für eine
MyISAM
-Tabelle zu beenden. Danach sollte
ALTER TABLE ... ENABLE KEYS
verwendet
werden, um die fehlenden Indizes neu zu erstellen. MySQL tut
dies mit einem speziellen Algorithmus, der wesentlich
schneller ist als das aufeinander folgende Einfügen von
Schlüsseln. Insofern sollte die Deaktivierung von
Schlüsseln vor umfangreichen Einfügeoperationen diese
erheblich beschleunigen. Die Verwendung von ALTER
TABLE ... DISABLE KEYS
erfordert neben den bereits
genannten Berechtigungen auch die Berechtigung
INDEX
.
Die Klauseln FOREIGN KEY
und
REFERENCES
werden von der
InnoDB
-Speicher-Engine unterstützt, die
ADD [CONSTRAINT
[
implementiert. Siehe auch
Abschnitt 14.2.6.4, „Fremdschlüssel-Beschränkungen“. Von
anderen Speicher-Engines werden die Klauseln zwar erkannt,
aber ignoriert. Zudem wird die Klausel
symbol
]] FOREIGN KEY (...)
REFERENCES ... (...)CHECK
von allen Speicher-Engines erkannt,
aber ignoriert. Siehe auch Abschnitt 13.1.5, „CREATE TABLE
“.
Diese Verhaltensweise – das Erkennen und nachfolgende
Ignorieren von Syntaxklauseln – ist aus
Kompatibilitätsgründen vorhanden. Sie erleichtert die
Portierung von Codes anderer SQL-Server und die Ausführung
von Anwendungen, die Tabellen mit Referenzen erstellen.
Siehe auch Abschnitt 1.9.5, „MySQL: Unterschiede im Vergleich zu ANSI SQL92“.
In separaten Klauseln derselben ALTER
TABLE
-Anweisung können Sie keinen Fremdschlüssel
hinzufügen und einen Fremdschlüssel löschen. Sie müssen
hierzu separate Anweisungen verwenden.
InnoDB
unterstützt die Verwendung von
ALTER TABLE
zum Löschen von
Fremdschlüsseln:
ALTER TABLEtbl_name
DROP FOREIGN KEYfk_symbol
;
In separaten Klauseln derselben ALTER
TABLE
-Anweisung können Sie keinen Fremdschlüssel
hinzufügen und einen Fremdschlüssel löschen. Sie müssen
hierzu separate Anweisungen verwenden.
Weitere Informationen finden Sie unter Abschnitt 14.2.6.4, „Fremdschlüssel-Beschränkungen“.
Wenn Sie den Standardzeichensatz einer Tabelle und den
Zeichensatz aller Zeichenspalten (CHAR
,
VARCHAR
, TEXT
) auf
einen neuen Zeichensatz umstellen wollen, verwenden Sie eine
Anweisung wie die folgende:
ALTER TABLEtbl_name
CONVERT TO CHARACTER SETcharset_name
;
Warnung: Die obige
Operation wandelt Spaltenwerte zwischen Zeichensätzen um.
Sie sollten dies keinesfalls tun, wenn
Sie eine Spalte in einem Zeichensatz (z. B.
latin1
) haben, die gespeicherten Werte
aber eigentlich einen anderen inkompatiblen Zeichensatz (wie
utf8
) verwenden. In diesem Fall müssen
Sie bei solchen Spalten Folgendes tun:
ALTER TABLE t1 CHANGE c1 c1 BLOB; ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
Der Grund, warum dies funktioniert, ist, dass, wenn Sie von
oder in BLOB
-Spalten konvertieren, keine
Konvertierung stattfindet.
Wenn Sie CONVERT TO CHARACTER SET binary
angeben, werden die CHAR
-,
VARCHAR
- und
TEXT
-Spalten in ihre entsprechenden
binären String-Typen umgewandelt
(BINARY
, VARBINARY
,
BLOB
). Das bedeutet, dass die Spalten
keinen Zeichensatz mehr haben; eine nachfolgende
CONVERT TO
-Operation hat also keine
Auswirkungen mehr.
Um nur den Standardzeichensatz einer Tabelle zu ändern, verwenden Sie folgende Anweisung:
ALTER TABLEtbl_name
DEFAULT CHARACTER SETcharset_name
;
Das Wort DEFAULT
ist optional. Der
Standardzeichensatz ist der Zeichensatz, der verwendet wird,
wenn Sie den Zeichensatz für eine neue Spalte, die Sie
(etwa mit ALTER TABLE ... ADD column
) zu
einer Tabelle hinzufügen, nicht explizit angegeben haben.
Bei einer InnoDB
-Tabelle, die mit einem
eigenen Tablespace in einer .ibd
-Datei
erstellt wurde, kann diese Datei verworfen und importiert
werden. Mit folgender Anweisung können Sie die
.ibd
-Datei verwerfen:
ALTER TABLE tbl_name
DISCARD TABLESPACE;
Hierbei wird die aktuelle .ibd
-Datei
gelöscht, d. h., Sie sollten zuerst ein Backup erstellt
haben. Der Versuch des Zugriffs auf die Tabelle, während
die Tablespace-Datei verworfen wird, führt zu einem Fehler.
Um die .ibd
-Sicherungsdatei in die
Tabelle zurückzuimportieren, kopieren Sie sie ins
Datenbankverzeichnis und setzen dann folgende Anweisung ab:
ALTER TABLE tbl_name
IMPORT TABLESPACE;
Siehe auch Abschnitt 14.2.3.1, „Verwendung von Tabellen-Tablespaces (ein Tablespace pro Tabelle)“.
ALTER TABLE
kann auch bei partitionierten
Tabellen verwendet werden, um Partitionen hinzuzufügen, zu
löschen, zu verbinden oder aufzutrennen. Auch die
Partitionierungswartung ist hiermit möglich.
Die einfache Angabe einer
partition_options
-Klausel zu
ALTER TABLE
für eine partitionierte
Tabelle partitioniert diese entsprechend dem
Partitionierungsschema neu, welches über die
partition_options
angegeben
wurde. Diese Klausel beginnt immer mit PARTITION
BY
und verwendet ansonsten dieselbe Syntax und die
Regeln, die auch auf die
partition_options
-Klausel für
CREATE TABLE
zutreffen. (Weitere
Informationen finden Sie in Abschnitt 13.1.5, „CREATE TABLE
“).
Hinweis: Diese Syntax wird
derzeit vom MySQL 5.1 Server akzeptiert, tut aber eigentlich
noch gar nichts. Wir erwarten die Implementierung im Zuge
der Fortentwicklung von MySQL 5.1.
Die partition_definition
-Klausel
für ALTER TABLE ADD PARTITION
unterstützt dieselben Optionen wie die gleichnamige Klausel
für die CREATE TABLE
-Anweisung.
(Informationen zu Syntax und eine Beschreibung finden Sie in
Abschnitt 13.1.5, „CREATE TABLE
“.) Angenommen, Sie haben wie
folgt eine partitionierte Tabelle erstellt:
CREATE TABLE t1 ( id INT, year_col INT ) PARTITION BY RANGE (year_col) ( PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES LESS THAN (1995), PARTITION p2 VALUES LESS THAN (1999) );
Sie können dieser Tabelle nun wie folgt eine neue Partition
p3
hinzufügen, die Werte aufnehmen kann,
die kleiner als 2002
sind.
ALTER TABLE t1 ADD PARTITION p3 VALUES LESS THAN (2002);
Hinweis: Sie können
ALTER TABLE
nicht zum Hinzufügen von
Partitionen zu einer Tabelle verwenden, die (noch) nicht
partitioniert ist.
Mit DROP PARTITION
können Sie eine oder
mehrere RANGE
- oder
LIST
-Partitionen löschen. Diese
Anweisung kann nicht für HASH
- oder
KEY
-Partitionen verwendet werden; dort
benutzen Sie stattdessen COALESCE
PARTITION
(siehe unten). In gelöschten
Partitionen vorhandene Daten, die in der Liste
partition_names
aufgeführt sind,
werden verworfen. So können Sie beispielsweise in der zuvor
definierten Tabelle t1
die Partitionen
p0
und p1
wie folgt
löschen:
ALTER TABLE DROP PARTITION p0, p1;
Beachten Sie, dass DROP PARTITION
nicht
bei Tabellen funktioniert, die die NDB
Cluster
-Speicher-Engine verwenden. Siehe auch
Abschnitt 17.3.1, „Verwaltung von RANGE
- und
LIST
-Partitionen“, und
Abschnitt 16.8, „Bekannte Beschränkungen von MySQL Cluster“.
ADD PARTITION
und DROP
PARTITION
unterstützen IF [NOT]
EXISTS
derzeit nicht. Ferner ist es nicht
möglich, eine Partition oder eine partitionierte Tabelle
umzubenennen. Stattdessen müssen Sie, wenn Sie eine
Partition umbenennen wollen, diese löschen und neu
erstellen. Wollen Sie eine partitionierte Tabelle
umbenennen, dann müssen Sie zunächst alle Partitionen
löschen, die Tabelle dann umbenennen und schließlich alle
gelöschten Partitionen neu erstellen.
COALESCE PARTITION
kann bei Tabellen
benutzt werden, die mit HASH
oder
KEY
partitioniert wurden, um die Anzahl
der Partitionen um den Wert
number
zu verringern. Angenommen,
Sie haben die Tabelle t2
mit der
folgenden Definition erstellt:
CREATE TABLE t2 ( name VARCHAR (30), started DATE ) PARTITION BY HASH(YEAR(started)) PARTITIONS (6);
Sie können die Anzahl der von t2
verwendeten Partitionen nun mit der folgenden Anweisung von
6 auf 4 verringern:
ALTER TABLE t2 COALESCE PARTITION 2;
Die in den letzten number
Partitionen enthaltenen Daten werden in die verbleibenden
Partitionen eingefügt. In diesem Fall werden die
Partitionen 4 und 5 in die ersten vier Partitionen (0 bis 3)
eingefügt.
Um einige, aber nicht alle Partitionen zu ändern, die von
einer partitionierten Tabelle verwendet werden, können Sie
REORGANIZE PARTITION
verwenden. Diese
Anweisung kann auf mehrere Arten verwendet werden:
Um mehrere Partitionen zu einer zusammenzufassen. Hierzu
zählen Sie mehrere Partitionen in der
partition_names
-Liste auf und
geben genau eine Definition für
partition_definition
an.
Um eine vorhandene Partition in mehrere Partitionen
aufzuspalten. Hierzu benennen Sie genau eine Partition
für partition_names
und
geben in
partition_definitions
mehrere
Definitionen an.
Um die Bereiche für eine Teilmenge der Partitionen, die
mit VALUES LESS THAN
definiert wird,
oder die Wertelisten für eine Teilmenge der Partitionen
zu ändern, die mit VALUES IN
definiert wird.
Hinweis: Bei Partitionen,
die nicht explizit aufgeführt wurden, verwendet MySQL
automatisch die Standardnamen p0
,
p1
, p2
usw.
Weitere Informationen zu ALTER TABLE ... REORGANIZE
PARTITION
-Anweisungen und zugehörige Beispiele
finden Sie in Abschnitt 17.3, „Partitionsverwaltung“.
Mehrere zusätzliche Klauseln ermöglichen die Wartung und
Reparatur von Partitionen analog zu der Art und Weise, wie
diese Funktionalitäten bei nicht partitionierten Tabellen
durch Anweisungen wie CHECK TABLE
und
REPAIR TABLE
(welche von partitionierten
Tabellen nicht unterstützt werden)
implementiert sind. Hierzu gehören ANALYZE
PARTITION
, CHECK PARTITION
,
OPTIMIZE PARTITION
, REBUILD
PARTITION
und REPAIR PARTITION
.
Jede dieser Optionen nimmt eine
partition_names
-Klausel entgegen,
die einen oder mehrere durch Kommata getrennte
Partitionsnamen umfasst. Die Partitionen müssen in der zu
ändernden Tabelle bereits vorhanden sein. Weitere
Informationen hierzu und zugehörige Beispiele finden Sie in
Abschnitt 17.3.3, „Wartung von Partitionen“.
Mit der C-API-Funktion mysql_info()
können
Sie ermitteln, wie viele Datensätze kopiert und (sofern
IGNORE
verwendet wird) aufgrund doppelt
vorhandener eindeutiger Schlüsselwerte gelöscht wurden. Siehe
auch Abschnitt 24.2.3.34, „mysql_info()
“.
Es folgen ein paar Beispiele, die Anwendungsmöglichkeiten für
ALTER TABLE
zeigen. Beginnen wir mit einer
Tabelle t1
, die wie folgt erstellt wird:
CREATE TABLE t1 (a INTEGER,b CHAR(10));
So benennen Sie die Tabelle von t1
in
t2
um:
ALTER TABLE t1 RENAME t2;
So ändern Sie den Typ der Spalte a
von
INTEGER
auf TINYINT NOT
NULL
(wobei der Name erhalten bleibt) und den Typ der
Spalte b
von CHAR(10)
zu
CHAR(20)
sowie deren Namen von
b
zu c
:
ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
So fügen Sie eine neue TIMESTAMP
-Spalte
namens d
hinzu:
ALTER TABLE t2 ADD d TIMESTAMP;
So fügen Sie Indizes zu den Spalten d
und
a
hinzu:
ALTER TABLE t2 ADD INDEX (d), ADD INDEX (a);
So entfernen Sie die Spalte c
:
ALTER TABLE t2 DROP COLUMN c;
So fügen Sie eine neue AUTO_INCREMENT
-Spalte
namens c
hinzu:
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c);
Beachten Sie, dass wir c
(als
PRIMARY KEY
) indiziert haben, weil
AUTO_INCREMENT
-Spalten indiziert werden
müssen, und dass wir außerdem c
als
NOT NULL
deklariert haben, weil
Primärschlüsselspalten nicht NULL
sein
dürfen.
Wenn Sie eine AUTO_INCREMENT
-Spalte
hinzufügen, werden als Spaltenwerte automatisch Sequenznummern
eingetragen. Bei MyISAM
-Tabellen können Sie
die erste Sequenznummer durch Ausführung von SET
INSERT_ID=
vor
value
ALTER TABLE
oder durch Verwendung der
Tabellenoption
AUTO_INCREMENT=
einstellen. Siehe auch Abschnitt 13.5.3, „value
SET
“.
Sie können die Tabellenoption ALTER TABLE ...
AUTO_INCREMENT=
bei
value
InnoDB
-Tabellen zur Einstellung der
Sequenznummer für neue Datensätze benutzen, wenn der Wert
größer ist als der höchste Wert in der
AUTO_INCREMENT
-Spalte. Ist der Wert
kleiner als der aktuelle Maximalwert der Spalte, dann wird keine
Fehlermeldung ausgegeben, und der aktuelle Sequenzwert wird
nicht geändert.
Wenn Sie bei MyISAM
-Tabellen die
AUTO_INCREMENT
-Spalte nicht ändern, ist die
Sequenznummer nicht betroffen. Wenn Sie eine
AUTO_INCREMENT
-Spalte löschen und dann eine
neue AUTO_INCREMENT
-Spalte hinzufügen,
beginnen die Sequenznummern wieder bei 1.
Siehe auch Abschnitt A.7.1, „Probleme mit ALTER TABLE
“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.