English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial lernen Sie, wie Sie mit SQL bestehende Tabellen ändern oder bearbeiten können.
Nach der Erstellung der Tabelle ist es sehr wahrscheinlich, dass Sie, wenn Sie damit beginnen, sie zu verwenden, feststellen, dass Sie vergessen haben, eine bestimmte Spalte oder Einschränkung zu erstellen oder einen falschen Namen für diese Spalte angegeben haben.
In diesem Fall können Sie die ALTER TABLE-Anweisung verwenden, um eine bestehende Tabelle durch Hinzufügen, Ändern oder Entfernen von Spalten zu ändern oder zu bearbeiten.
Berücksichtigen wirshippersIn der Datenbank gibt es eine Tabelle mit folgender Struktur:
+--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | NO | PRI | NULL | auto_increment | | shipper_name | varchar(60) | NO | | NULL | | | phone | varchar(60) | NO | | NULL | | +--------------+-------------+------+-----+---------+----------------+
Wir werden alle ALTER TABLE-Anweisungen mit der Tabelle shippers verwenden.
Angenommen, wir möchten die bestehende Tabelle shippers durch das Hinzufügen einer neuen Spalte erweitern. Aber das Problem ist, wie können wir dies mit einem SQL-Befehl erreichen? Lassen Sie uns sehen.
Grundlegende Syntax, um eine neue Spalte zu einem bestehenden Tisch hinzuzufügen:
ALTER TABLE table_name ADD column_name data_type constraints;
Die folgenden Anweisungen fügen der Tabelle shippers eine neue Spalte fax hinzu.
ALTER TABLE shippers ADD fax VARCHAR(20);
Nun, nach der Ausführung der obigen Anweisungen, wenn Sie den Befehl DESCRIBE shippers verwenden und die Tabellenstruktur sehen, wie im MySQL-Command-Line-Client gezeigt:
+--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | NO | PRI | NULL | auto_increment | | shipper_name | varchar(60) | NO | | NULL | | | phone | varchar(60) | NO | | NULL | | |2| fax | varchar( +--------------+-------------+------+-----+---------+----------------+
Hinweis:Wenn Sie eine NOT NULL-Spalte zu einer bestehenden Tabelle hinzufügen möchten, müssen Sie eine expliziteStandardwert. Dieser Standardwert wird verwendet, um neue Spalten für jede bestehende Zeile in der Tabelle zu füllen.
Hinweis:Wenn Sie beim Hinzufügen einer neuen Spalte zur Tabelle weder NULL noch NOT NULL angeben, wird die Spalte als NULL angegeben.
MySQL fügt Standardmäßig neue Spalten am Ende hinzu. Wenn Sie jedoch eine neue Spalte nach einer bestimmten Spalte hinzufügen möchten, können Sie den folgenden AFTER-Ausdruck verwenden:
mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;
MySQL bietet zunächst einen weiteren Ausdruck, den Sie verwenden können, um eine neue Spalte am Anfang der Tabelle hinzuzufügen. Ersetzen Sie einfach den AFTER-Ausdruck im vorliegenden Beispiel durch FIRST, umshippersFügen Sie die Spalte fax am Anfang der Tabelle hinzu.
In MySQL können Sie die Syntax jederzeit ändern, um die Position einer bestehenden Spalte in einer Tabelle zu ändern, wenn Sie mit der Position einer bestehenden Spalte in einer Tabelle unzufrieden sind:
ALTER TABLE table_name MODIFY column_name column_definition AFTER column_name;
Die folgenden Anweisungen fügen die Spaltefaxwirdshippersin der Tabelleshipper_namenach der Spalte.
mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;
Unser aktueller shippers-Tabelle hat ein Hauptproblem. Selbst wenn Sie Aufzeichnungen mit duplicate Telefonnummern einfügen, wird dies nicht verhindert, was schlecht ist, Telefonnummern sollten einzigartig sein.
Sie könnenphoneEine UNIQUE-Beschränkung hinzufügen, um dieses Problem zu lösen. Die Grundgrammatik, um eine Einschränkung zu einem bestehenden Tabelspalte hinzuzufügen, ist wie folgt:
ALTER TABLE table_name ADD UNIQUE (column_name,...);
Die folgende Anweisung UNIQUE wirdphoneEine Spalte hinzufügen, um Einschränkungen zu setzen.
mysql> ALTER TABLE shippers ADD UNIQUE (phone);
Nach Ausführung dieses Befehls erhalten Sie eine Fehlermeldung, wenn Sie versuchen, eine duplicate Telefonnummer einzufügen.
Gleichzeitig können Sie den folgenden Inhalt verwenden, wenn Sie in der Tabelle, die Sie erstellt haben, keine PRIMARY KEY haben:
ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);
如果未定义,以下语句将PRIMARY KEY 约束添加到shipper_id列。
mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);
从现有表中删除列的基本语法:
ALTER TABLE table_name DROP COLUMN column_name;
以下语句从shippers表中删除我们新添加的fax列。
mysql> ALTER TABLE shippers DROP COLUMN fax;
现在,执行上面的语句后,如果您看到表结构,则如下所示:
+--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | NO | PRI | NULL | auto_increment | | shipper_name | varchar(60) | NO | | NULL | | | phone | varchar(20) | NO | UNI | NULL | | +--------------+-------------+------+-----+---------+----------------+
您可以使用以下ALTER子句在SQL Server中修改列的数据类型:
ALTER TABLE table_name ALTER COLUMN column_name new_data_type;
但是MySQL数据库服务器不支持ALTER COLUMN语法。它支持可用于修改列的备选修改子句,如下所示:
ALTER TABLE table_name MODIFY column_name new_data_type;
以下语句将shippers表中phone列的当前数据类型从VARCHAR更改为CHAR,长度从20更改为15。
mysql> ALTER TABLE shippers MODIFY phone CHAR(15);
类似地,您可以使用MODIFY子句在MySQL表中的列是否允许空值之间进行切换,通过重新指定现有的列定义,并在最后添加null或not null约束,如下所示:
mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;
Grundlegende Syntax zum Umbenennen eines bestehenden Tables in MySQL:
ALTER TABLE current_table_name RENAME new_column_name;
Die folgenden Anweisungen werden unsereshippersTabelle umbenennen inshipper。
mysql> ALTER TABLE shippers RENAME shipper;
Sie können auch die folgenden RENAME TABLE-Anweisungen in MySQL verwenden, um dasselbe Ziel zu erreichen:
mysql> RENAME TABLE shippers TO shipper;