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.

  • ALTER-opdracht: Met ALTER TABLE wordt een bestaand object opnieuw gedefinieerd, waardoor een live schema nieuwe vereisten kan overnemen zonder dat het schema opnieuw hoeft te worden opgebouwd.
  • KOLOM TOEVOEGEN: Met ALTER TABLE ADD COLUMN wordt een veld toegevoegd, waarbij de bestaande rijen alle waarden behouden die ze al bevatten.
  • 🗑️ DROP-opdracht: Met DROP kunt u een database, een tabel of een enkele kolom permanent verwijderen via ALTER TABLE DROP COLUMN.
  • 🔁 RENAME-opdracht: Met de opdracht RENAME TABLE wordt alleen de naam van een tabel gewijzigd; er gaan geen gegevens in de tabel verloren.
  • WIJZIGING Trefwoord: Met CHANGE wordt een kolom hernoemd en worden het type en de beperkingen ervan in één instructie opnieuw gedefinieerd. Daarom zijn beide kolomnamen vereist.
  • 🧩 WIJZIGEN Trefwoord: MODIFY wijzigt het type en de beperkingen, terwijl keeping De naam is de veiligere keuze voor een bewerking die alleen tekst bevat.
  • 📍 NA Trefwoord: AFTER plaatst een nieuw toegevoegde kolom op een gekozen positie in plaats van aan het einde van de tabel.

MySQL WIJZIGEN, VERWIJDEREN, HERNOEMEN en AANPASSEN

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
email 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
email 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

  1. Een database verwijderen uit de MySQL server.
  2. 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
email 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

  1. De naam van een kolom wijzigen
  2. Wijzig het gegevenstype van de kolom.
  3. 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
email varchar(255) JA NULL

Stel dat de eis is om

  1. Wijzig de veldnaam van “full_names” naar “fullname”.
  2. Wijzig het naar het gegevenstype char met een breedte van 250.
  3. 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
email varchar(255) JA NULL

De kolom heet nu fullname, bevat char(250) en weigert NULL-waarden.

WIJZIGEN trefwoord

Met het trefwoord MODIFY kunt u

  1. Wijzig het gegevenstype van de kolom.
  2. 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
email 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
email 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.

Veelgestelde vragen

Nee. DDL-instructies zoals ALTER, DROP en RENAME worden impliciet vastgelegd. MySQLEen openstaande transactie kan deze wijzigingen dus niet ongedaan maken. Herstellen vanuit een back-up is de enige manier om terug te keren naar de oorspronkelijke situatie.

Het hangt af van de wijziging. Veel InnoDB-wijzigingen worden online uitgevoerd en staan ​​gelijktijdige lees- en schrijfbewerkingen toe, terwijl andere de hele tabel kopiëren en schrijfbewerkingen blokkeren. Voeg ALGORITHM- en LOCK-clausules toe om aan te geven wat u wel en niet accepteert.

DROP verwijdert het object zelf. TRUNCATE maakt een tabel leeg, maar behoudt de structuur ervan. VERWIJDEREN Verwijdert geselecteerde rijen en kan worden gefilterd met een WHERE-clausule.

Meestal wel. AI-assistenten die zijn ingebouwd in clients zoals MySQL Werkbank Zet een verzoek zoals "voeg een nullable datumkolom toe na date_of_birth" om in geldige syntaxis. RevVergelijk de gegenereerde instructie met het live schema voordat u deze uitvoert.

Slechts gedeeltelijk. AI-reviewtools signaleren duidelijke risico's, zoals een verwijderde kolom die nog steeds in een query wordt genoemd, of een beperkt gegevenstype dat gegevens afkapt. Ze kunnen niet elke aanroeper zien, dus een testrun blijft noodzakelijk.

Vat dit bericht samen met: