MYSQL – ÄNDERN, LÖSCHEN, UMBENENNEN, ÄNDERN
⚡ Intelligente Zusammenfassung
ALTER, DROP, RENAME und MODIFY sind die MySQL Befehle, die eine Datenbank umstrukturieren, während sie bereits in Gebrauch ist. Sie fügen Objekte wie Tabellen und Spalten hinzu, entfernen sie, benennen sie um und definieren sie neu, ohne die bereits gespeicherten Zeilen zu verwerfen.

Was ist der ALTER-Befehl in MySQL?
Das ALTER Der Befehl modifiziert eine bestehende Datenbank, Tabelle, Ansicht oder ein anderes Datenbankobjekt, das im Laufe des Lebenszyklus einer Datenbank geändert werden muss. Er ermöglicht die Weiterentwicklung eines Schemas, nachdem es bereits erstellt und mit Daten gefüllt wurde.
Geschäftsanforderungen sind selten statisch, und ein Datenbankdesign muss sich entsprechend anpassen. Angenommen, das Design für die Myflix-Datenbank ist implementiert und die Benutzer arbeiten damit, und erst dann bemerkt das Team, dass wichtige Informationen fehlen. Niemand möchte die bestehenden Datensätze verlieren; die neuen Informationen sollen einfach daneben gespeichert werden.
ALTER deckt genau diese Situation ab. Es kann den Datentyp eines Feldes von Zeichenkette in Zahl ändern, ein Feld umbenennen oder einer Tabelle eine völlig neue Spalte hinzufügen, während die bereits in der Tabelle gespeicherten Daten unverändert bleiben.
Nachdem der Zweck des Befehls festgelegt wurde, besteht der nächste Schritt in der Syntax, die ihn ausführt.
MySQL ALTER-Syntax
Die grundlegende Syntax zum Hinzufügen einer Spalte zu einer bereits existierenden Tabelle wird im Folgenden dargestellt.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
HIER KLICKEN
- „ALTER TABLE `table_name`“ ist der Befehl, der es sagt MySQL Server, um die Tabelle mit dem Namen „table_name“ zu ändern.
- „Spalte „Spaltenname“ „Datentyp“ hinzufügen“ ist der Befehl, der es sagt MySQL Der Server soll eine neue Spalte mit dem Namen `column_name` und dem Datentyp `data_type` hinzufügen.
Angenommen, Myflix hat Online-Abrechnung und -Zahlung eingeführt. Um dies zu ermöglichen, muss der Mitgliedertabelle ein Feld für die Kreditkartennummer hinzugefügt werden. Bevor Sie Änderungen vornehmen, sollten Sie sich die aktuelle Tabellenstruktur ansehen. Das untenstehende Skript erledigt dies.
SHOW COLUMNS FROM `members`;
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| ganze Namen | varchar(350) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
💡 Hinweis zu int(11): Die Zahl in Klammern gibt lediglich die Anzeigebreite an. MySQL Version 8.0.17 hat die Verwendung für Integer-Typen als veraltet markiert, daher meldet ein moderner Server diese Spalte einfach als intDie Speichergröße bleibt unverändert.
Das unten gezeigte Skript fügt das neue Feld zur Mitgliedertabelle hinzu.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Die Ausführung dieses Skripts für die Datenbank myflixdb fügt der Tabelle „members“ eine Spalte namens „credit_card_number“ mit dem Datentyp VARCHAR hinzu. Die erneute Ausführung des Skripts „SHOW COLUMNS“ liefert folgendes Ergebnis.
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| ganze Namen | varchar(350) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL | |||
| Kreditkartennummer | varchar(25) | JA | NULL |
Die hervorgehobene Zeile bestätigt, dass credit_card_number zur Tabelle members hinzugefügt wurde, und die bereits in den anderen Spalten vorhandenen Daten durch die Hinzufügung nicht verändert wurden.
Das Hinzufügen einer Spalte ist nur die halbe Miete. Ein Schema muss auch nicht mehr benötigte Objekte entfernen; dafür verwendet man den Befehl DROP.
Was ist der DROP-Befehl in MySQL?
Der Befehl DROP löscht ein Objekt endgültig. Er wird verwendet, um
- Eine Datenbank löschen MySQL Server.
- Ein Objekt wie eine Tabelle oder eine Spalte aus einer Datenbank löschen.
⚠️ Warnung: DROP ist nicht rückgängig zu machen. Weder das Objekt noch die darin enthaltenen Zeilen können ohne Backup wiederhergestellt werden. Führen Sie daher zuerst eine SELECT-Abfrage für das Ziel durch und überprüfen Sie das Backup.
Dropping eine Säule
Im obigen ALTER-Beispiel wurde der Tabelle „members“ eine Spalte namens „credit_card_number“ hinzugefügt. Angenommen, die Online-Abrechnungsfunktion wird verschoben und diese Spalte soll wieder entfernt werden. Das folgende Skript erledigt dies.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Durch Ausführen des Skripts wird die Spalte credit_card_number aus der Tabelle members entfernt. Die erneute Auflistung der Spalten bestätigt das Ergebnis.
SHOW COLUMNS FROM `members`;
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| ganze Namen | varchar(350) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Die Kreditkartennummer ist nicht mehr in der Feldliste enthalten.
TROPFENTABELLE
Die Syntax zum Löschen einer gesamten Tabelle aus einer Datenbank lautet wie folgt.
DROP TABLE `sample_table`;
Angewendet auf ein reales Objekt, sieht die Aussage folgendermaßen aus.
DROP TABLE `categories_archive`;
Durch die Ausführung dieses Befehls werden die Tabelle mit dem Namen `categories_archive` und alle darin enthaltenen Zeilen aus der Datenbank gelöscht.
DATENBANK VERLIEREN
Dasselbe Schlüsselwort entfernt ein gesamtes Schema. Durch Hinzufügen von IF EXISTS wird der Fehler unterdrückt, dass MySQL wird ausgelöst, wenn das Ziel bereits nicht mehr existiert, was in Skripten nützlich ist, die mehr als einmal ausgeführt werden.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Das Entfernen eines Objekts ist endgültig. Wenn das Objekt selbst erhalten bleiben soll und nur sein Name falsch ist, ist der Befehl RENAME das richtige Werkzeug.
Was ist der Befehl RENAME in MySQL?
Mit dem Befehl RENAME wird der Name eines vorhandenen Datenbankobjekts, z. B. einer Tabelle oder einer Spalte, in einen neuen Namen geändert. Durch das Umbenennen einer Tabelle gehen keine der darin enthaltenen Daten verloren.
Der Befehl hat folgende grundlegende Syntax.
RENAME TABLE `current_table_name` TO `new_table_name`;
Um die Tabelle movierentals in movie_rentals umzubenennen, wird das unten stehende Skript verwendet.
RENAME TABLE `movierentals` TO `movie_rentals`;
Durch die Ausführung wird die Tabelle `movierentals` in `movie_rentals` umbenannt. Da es sich bei der Umbenennung lediglich um eine Änderung der Bezeichnung handelt, stellt die umgekehrte Anweisung den ursprünglichen Namen wieder her.
RENAME TABLE `movie_rentals` TO `movierentals`;
Der Befehl RENAME TABLE dient zum Ändern des Namens einer Tabelle. ÜberblickUnd die Veränderung dessen, was es enthält, ist die Aufgabe des Schlüsselworts CHANGE.
Schlüsselwort ändern
Das Schlüsselwort CHANGE ermöglicht Ihnen Folgendes:
- Ändern Sie den Namen einer Spalte
- Ändern Sie den Datentyp der Spalte
- Ändern Sie die Spaltenbeschränkungen
Betrachten wir ein Beispiel. Das Feld full_names in der Tabelle members ist vom Datentyp varchar mit einer Breite von 350, wie das folgende Skript bestätigt.
SHOW COLUMNS FROM `members`;
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| ganze Namen | varchar(350) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Angenommen, die Anforderung lautet:
- Ändern Sie den Feldnamen von „full_names“ in „fullname“.
- Ändern Sie es in den Datentyp char mit einer Breite von 250.
- Fügen Sie eine NOT NULL-Einschränkung hinzu
Alle drei Änderungen werden durch eine einzige CHANGE-Anweisung durchgeführt.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Die Ausführung gegen myflixdb und das anschließende Ausführen des Skripts SHOW COLUMNS liefert folgendes Ergebnis.
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| vollständiger name | Zeichen (250) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Die Spalte heißt nun fullname, enthält Zeichen vom Typ char(250) und weist NULL-Werte zurück.
Schlüsselwort ändern
Das Schlüsselwort MODIFY ermöglicht Ihnen Folgendes:
- Ändern Sie den Datentyp der Spalte.
- Ändern Sie die Spaltenbeschränkungen
Im obigen CHANGE-Beispiel musste der Feldname zweimal angegeben werden, obwohl die Umbenennung nur ein Teil des Ziels war. Das Weglassen des Feldnamens in einer CHANGE-Anweisung führt zu einem Fehler. Wenn nur der Datentyp und die Einschränkungen angepasst werden müssen und der Name unverändert bleiben soll, erledigt MODIFY dies mit nur einer Erwähnung der Spalte.
Das unten stehende Skript ändert die Breite des Feldes „fullname“ von 250 auf 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Die Ausführung gegen myflixdb und das anschließende Ausführen des Skripts SHOW COLUMNS liefert das unten gezeigte Ergebnis.
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| vollständiger name | Zeichen (50) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
⚠️ Warnung: Das Verengen einer Spalte kürzt Daten, die nicht mehr hineinpassen. Jeder Name, der länger als 50 Zeichen ist, wird durch diese Anweisung abgeschnitten. Überprüfen Sie daher den längsten vorhandenen Wert mit einem SELECT Abfrage vor dem Verkleinern eines Feldes.
SPALTE ÄNDERN vs. MODIFIZIEREN vs. UMBENENNEN
Die drei Schlüsselwörter überschneiden sich, und die Wahl des falschen Schlüssels ist die häufigste Fehlerquelle in diesem Bereich. Die folgende Tabelle stellt sie einander gegenüber.
| Stichwort (Keyword) | Benennt die Spalte um | Ändert Typ und Einschränkungen | Alter Name erforderlich | Typische Verwendung |
|---|---|---|---|---|
| ÄNDERN | Ja | Ja | Ja, und der neue Name | Umbenennen und in einer Anweisung neu definieren |
| ÄNDERN | Nein | Ja | Name einmal vergeben | Eine Spalte verbreitern, verengen oder neu formatieren |
| SPALTE UMBENENNEN | Ja | Nein | Ja, und der neue Name | Nur umbenennen, von MySQL 8.0 weiter |
MySQL Version 8.0 fügte eine vierte Option für den einfachsten Fall hinzu: eine Umbenennung ohne jegliche Neudefinition.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Typ und Name sind festgelegt. Die verbleibende Frage ist, wo eine neue Spalte in der Tabelle platziert wird; dies wird durch das Schlüsselwort AFTER gesteuert.
NACH dem Schlüsselwort
Standardmäßig wird eine mit ALTER TABLE hinzugefügte Spalte am Ende der Tabelle eingefügt. Um sie stattdessen an einer bestimmten Position zu platzieren, wird der ALTER-Befehl mit dem Schlüsselwort AFTER kombiniert.
Das unten stehende Skript fügt „date_of_registration“ direkt nach date_of_birth in die Tabelle „members“ ein.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Die Ausführung gegen myflixdb und das anschließende Ausführen des Skripts SHOW COLUMNS liefert das unten gezeigte Ergebnis.
| Feld | Typ | Null | Wesentliche | Standard | Extra |
|---|---|---|---|---|---|
| Mitgliedsnummer | int (11) | NEIN | PRI | NULL | auto_inkrement |
| vollständiger name | Zeichen (50) | NEIN | NULL | ||
| Geschlecht | varchar(6) | JA | NULL | ||
| Geburtsdatum | Datum | JA | NULL | ||
| Datum der Registrierung | Datum | JA | NULL | ||
| physikalische Adresse | varchar(255) | JA | NULL | ||
| Postanschrift | varchar(255) | JA | NULL | ||
| Kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Die hervorgehobene Zeile ist die Spalte, die nach date_of_birth hinzugefügt wurde. Das Schlüsselwort FIRST funktioniert analog und verschiebt die neue Spalte an den Anfang der Tabelle.
