MYSQL – VERANDEREN, VERWIJDEREN, HERNOEMEN, WIJZIGEN
⚡ Slimme samenvatting
ALTER, DROP, RENAME en MODIFY zijn de MySQL Commando's die een database herstructureren nadat deze al in gebruik is. Ze voegen objecten zoals tabellen en kolommen toe, verwijderen ze, hernoemen ze en herdefiniëren ze, zonder de reeds opgeslagen rijen te verwijderen.

Wat is het ALTER-commando in MySQL?
De ALTER Met dit commando wordt een bestaande database, tabel, weergave of ander databaseobject gewijzigd dat tijdens de levenscyclus van een database moet worden aangepast. Het is het commando waarmee een schema kan evolueren nadat het al is aangemaakt en gevuld met gegevens.
Bedrijfsvereisten staan zelden stil en een databaseontwerp moet daarin meegroeien. Stel dat het ontwerp voor de Myflix-database is geïmplementeerd en gebruikers ermee werken, en pas dan realiseert het team zich dat er essentiële informatie ontbreekt. Niemand wil de bestaande rijen kwijt; ze willen de nieuwe informatie er gewoon naast vastleggen.
De ALTER-instructie is precies voor die situatie bedoeld. Hiermee kan het gegevenstype van een veld worden gewijzigd van een tekenreeks naar een getal, een veld worden hernoemd of een volledig nieuwe kolom aan een tabel worden toegevoegd, terwijl de reeds in de tabel opgeslagen gegevens intact blijven.
Nu het doel van de opdracht is vastgesteld, is de volgende stap de syntaxis waarmee die opdracht wordt uitgevoerd.
MySQL ALTER-syntaxis
De basissyntaxis voor het toevoegen van een kolom aan een bestaande tabel wordt hieronder weergegeven.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
HIER
- “ALTER TABEL `tabelnaam`” is het commando dat vertelt MySQL server om de tabel genaamd `table_name` te wijzigen.
- “VOEG KOLOM TOE `kolomnaam` `data_type`” is het commando dat vertelt MySQL De server voegt een nieuwe kolom toe met de naam `column_name` en het gegevenstype `data_type`.
Stel dat Myflix online facturering en betalingen heeft geïntroduceerd. Om dit te ondersteunen, moet er een veld voor het creditcardnummer aan de ledentabel worden toegevoegd. Voordat er wijzigingen worden aangebracht, is het de moeite waard om de huidige structuur van de tabel te bekijken. Het onderstaande script doet dat.
SHOW COLUMNS FROM `members`;
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| volledige namen | varchar(350) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
💡 Opmerking over int(11): Het getal tussen haakjes geeft alleen de weergavebreedte aan. MySQL In versie 8.0.17 is deze functie voor integer-typen afgeschaft, waardoor een moderne server deze kolom eenvoudigweg als volgt weergeeft: intDe opslagcapaciteit blijft ongewijzigd.
Het onderstaande script voegt het nieuwe veld toe aan de ledentabel.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Door dit script uit te voeren op myflixdb wordt een kolom met de naam credit_card_number toegevoegd aan de tabel members met het gegevenstype VARCHAR. Als je het SHOW COLUMNS-script opnieuw uitvoert, krijg je het volgende resultaat.
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| volledige namen | varchar(350) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL | |||
| creditcardnummer | varchar(25) | JA | NULL |
De gemarkeerde rij bevestigt dat credit_card_number is toegevoegd aan de tabel members, en dat de gegevens in de andere kolommen ongewijzigd blijven.
Het toevoegen van een kolom is slechts de helft van het verhaal. Een schema moet ook objecten verwijderen die het niet langer nodig heeft, en dat is de taak van het DROP-commando.
Wat is het DROP-commando in MySQL?
Met het commando DROP wordt een object permanent verwijderd. Het wordt gebruikt om
- Een database verwijderen uit de MySQL server.
- Een object, zoals een tabel of een kolom, uit een database verwijderen.
⚠️ Waarschuwing: Een DROP-bewerking is niet omkeerbaar. Noch het object, noch de rijen erin kunnen worden hersteld zonder een back-up. Voer daarom eerst een SELECT-query uit op het doelobject en controleer de back-up.
Valping een kolom
In het bovenstaande ALTER-voorbeeld werd een kolom met de naam credit_card_number toegevoegd aan de tabel members. Stel dat de online factureringsfunctie wordt uitgesteld en die kolom weer moet worden verwijderd. Het volgende script doet dat.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Het uitvoeren van het script verwijdert de kolom 'credit_card_number' uit de tabel 'members'. Het opnieuw weergeven van de kolommen bevestigt dit resultaat.
SHOW COLUMNS FROM `members`;
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| volledige namen | varchar(350) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Het creditcardnummer is verdwenen uit de lijst met velden.
DROP TAFEL
De syntax om een volledige tabel uit een database te verwijderen is als volgt.
DROP TABLE `sample_table`;
Toegepast op een echt object ziet de bewering er als volgt uit.
DROP TABLE `categories_archive`;
Door deze opdracht uit te voeren, wordt de tabel met de naam `categories_archive` en alle rijen daarin uit de database verwijderd.
DATABANK DROP
Hetzelfde trefwoord verwijdert een volledig schema. Door IF EXISTS toe te voegen, wordt de foutmelding onderdrukt. MySQL Deze uitzondering treedt op wanneer het doel al verdwenen is, wat handig is in scripts die meer dan eens worden uitgevoerd.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Het verwijderen van een object is definitief. Als het object zelf behouden moet blijven en alleen de naam onjuist is, is de opdracht RENAME het juiste hulpmiddel.
Wat is het RENAME-commando in MySQL?
Met de RENAME-opdracht wordt de naam van een bestaand databaseobject, zoals een tabel of een kolom, gewijzigd in een nieuwe naam. Het hernoemen van een tabel zorgt er niet voor dat de daarin opgeslagen gegevens verloren gaan.
Het commando heeft de volgende basissyntaxis.
RENAME TABLE `current_table_name` TO `new_table_name`;
Om de tabel movierentals te hernoemen naar movie_rentals, wordt het onderstaande script gebruikt.
RENAME TABLE `movierentals` TO `movie_rentals`;
Door deze opdracht uit te voeren, wordt de tabel `movierentals` hernoemd naar `movie_rentals`. Omdat de hernoeming slechts een wijziging van het label is, herstelt dezelfde opdracht in omgekeerde volgorde de oorspronkelijke naam.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE behandelt de naam van een tabel. Het hernoemen van een tabel... kolomEn het veranderen van wat het bevat, is de taak van het sleutelwoord CHANGE.
WIJZIGING Trefwoord
Met het trefwoord CHANGE kunt u
- De naam van een kolom wijzigen
- Wijzig het gegevenstype van de kolom.
- Wijzig de kolombeperkingen.
Neem bijvoorbeeld het volgende. Het veld full_names in de tabel members is van het gegevenstype varchar met een breedte van 350, zoals het onderstaande script bevestigt.
SHOW COLUMNS FROM `members`;
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| volledige namen | varchar(350) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Stel dat de eis is om
- Wijzig de veldnaam van “full_names” naar “fullname”.
- Wijzig het naar het gegevenstype char met een breedte van 250.
- Voeg een NOT NULL-beperking toe
Alle drie de bewerkingen worden uitgevoerd met één enkele CHANGE-instructie.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Als je dit uitvoert op myflixdb en vervolgens het SHOW COLUMNS-script uitvoert, krijg je het volgende resultaat.
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| voor-en achternaam | char (250) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
De kolom heet nu fullname, bevat char(250) en weigert NULL-waarden.
WIJZIGEN trefwoord
Met het trefwoord MODIFY kunt u
- Wijzig het gegevenstype van de kolom.
- Wijzig de kolombeperkingen.
In het bovenstaande CHANGE-voorbeeld moest de veldnaam twee keer worden opgegeven, hoewel het hernoemen slechts een deel van het doel was. Het weglaten van de veldnaam in een CHANGE-instructie genereert een fout. Als alleen het gegevenstype en de beperkingen hoeven te worden aangepast en de naam ongewijzigd moet blijven, volstaat MODIFY met één enkele vermelding van de kolom.
Het onderstaande script wijzigt de breedte van het veld "volledige naam" van 250 naar 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Als je dit uitvoert op myflixdb en vervolgens het SHOW COLUMNS-script uitvoert, krijg je het onderstaande resultaat.
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| voor-en achternaam | char (50) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
⚠️ Waarschuwing: Het verkleinen van een kolom verwijdert gegevens die er niet meer in passen. Elke naam die langer is dan 50 tekens wordt door deze instructie ingekort, dus controleer de langst bestaande waarde met een SELECT Voer een query uit voordat een veld wordt verkleind.
WIJZIGEN vs. AANPASSEN vs. KOLOM HERNOEMEN
De drie trefwoorden overlappen elkaar, en het kiezen van het verkeerde trefwoord is de meest voorkomende bron van fouten op dit gebied. De tabel hieronder zet ze naast elkaar.
| Keyword | Hernoemt de kolom | Wijzigt type en beperkingen | Oude naam vereist | Typisch gebruik |
|---|---|---|---|---|
| WIJZIGEN | Ja | Ja | Ja, plus de nieuwe naam. | Hernoem en herdefinieer in één statement. |
| WIJZIGEN | Nee | Ja | Naam eenmaal opgegeven | Een kolom verbreden, versmallen of opnieuw typen |
| KOLOM HERNOEMEN | Ja | Nee | Ja, plus de nieuwe naam. | Alleen hernoemen, van MySQL 8.0 verder |
MySQL In versie 8.0 werd een vierde optie toegevoegd voor het eenvoudigste geval: een hernoeming zonder enige herdefinitie.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Het type en de naam zijn vastgelegd. De resterende vraag is waar een nieuwe kolom in de tabel komt te staan, wat wordt bepaald door het trefwoord AFTER.
NA trefwoord
Standaard komt een kolom die met ALTER TABLE wordt toegevoegd aan het einde van de tabel terecht. Om deze op een specifieke positie te plaatsen, wordt de ALTER-opdracht gecombineerd met het trefwoord AFTER.
Het onderstaande script voegt "date_of_registration" direct na "date_of_birth" toe aan de ledentabel.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Als je dit uitvoert op myflixdb en vervolgens het SHOW COLUMNS-script uitvoert, krijg je het onderstaande resultaat.
| Veld | Type | Null | sleutel | Standaard | Extra |
|---|---|---|---|---|---|
| lidmaatschapsnummer | int (11) | NEE | PRI | NULL | auto_increment |
| voor-en achternaam | char (50) | NEE | NULL | ||
| geslacht | varchar(6) | JA | NULL | ||
| geboortedatum | gegevens | JA | NULL | ||
| datum_van_registratie | gegevens | JA | NULL | ||
| fysiek adres | varchar(255) | JA | NULL | ||
| postadres | varchar(255) | JA | NULL | ||
| contact_nummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
De gemarkeerde rij is de kolom die na date_of_birth is toegevoegd. Het trefwoord FIRST werkt op dezelfde manier en verplaatst de nieuwe kolom naar het begin van de tabel.
