MYSQL – ÄNDRA, SLÄPP, BYT NAMN, ÄNDRA
⚡ Smart sammanfattning
ÄNDRING, TA BORT, BYT NAMN och MODIFIERA är MySQL Kommandon som omformar en databas efter att den redan har använts. De lägger till, tar bort, byter namn på och omdefinierar objekt som tabeller och kolumner utan att radera de rader som redan är lagrade.

Vad är ALTER-kommandot i MySQL?
Ocuco-landskapet ÄNDRA Kommandot modifierar en befintlig databas, tabell, vy eller annat databasobjekt som behöver ändras under databasens livscykel. Det är kommandot som låter ett schema utvecklas efter att det redan har skapats och fyllts med data.
Affärskrav står sällan stilla, och en databasdesign måste följa med dem. Anta att designen för Myflix-databasen har implementerats och användarna arbetar med den, och först då inser teamet att viktig information har utelämnats. Ingen vill förlora de befintliga raderna; de vill helt enkelt registrera den nya informationen bredvid dem.
ALTER täcker just den situationen. Det kan ändra datatypen för ett fält från en sträng till ett tal, byta namn på ett fält eller lägga till en helt ny kolumn i en tabell, allt medan data som redan lagras i tabellen förblir intakta.
När syftet med kommandot är fastställt är nästa steg syntaxen som utför det.
MySQL ALTER-syntax
Den grundläggande syntaxen som används för att lägga till en kolumn i en tabell som redan finns visas nedan.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
HÄR
- "ÄNDRA TABELL `tabellnamn`" är kommandot som berättar MySQL server för att ändra tabellen med namnet `tabellnamn`.
- "ADD COLUMN `column_name` `data_type`" är kommandot som berättar MySQL servern för att lägga till en ny kolumn med namnet `kolumnnamn` med datatypen `datatyp`.
Anta att Myflix har infört onlinefakturering och betalningar. För att stödja detta måste ett fält för kreditkortsnummer läggas till i medlemstabellen. Innan man gör några ändringar är det värt att titta på tabellens struktur som den ser ut. Skriptet som visas nedan gör det.
SHOW COLUMNS FROM `members`;
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| Fullständiga namn | varchar(350) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
💡 Anmärkning om int(11): Siffran inom parentes är endast en visningsbredd. MySQL 8.0.17 avfärdade den för heltalstyper, så en modern server rapporterar den här kolumnen helt enkelt som intLagringsstorleken är oförändrad.
Skriptet som visas nedan lägger till det nya fältet i medlemstabellen.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Om man kör det här skriptet mot myflixdb läggs en kolumn med namnet credit_card_number till i medlemstabellen med VARCHAR som datatyp. Om man kör skriptet SHOW COLUMNS igen får man följande resultat.
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| Fullständiga namn | varchar(350) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL | |||
| kreditkortsnummer | varchar(25) | JA | NULL |
Den markerade raden bekräftar att credit_card_number har lagts till i medlemstabellen, och att data som redan finns i de andra kolumnerna inte påverkas av tillägget.
Att lägga till en kolumn är bara halva historien. Ett schema måste också göra sig av med objekt som det inte längre behöver, vilket är DROP-kommandots uppgift.
Vad är DROP-kommandot i MySQL?
DROP-kommandot tar bort ett objekt permanent. Det används för att
- Ta bort en databas från MySQL server.
- Ta bort ett objekt, till exempel en tabell eller en kolumn, från en databas.
⚠️ Varning: DROP är inte reversibelt. Varken objektet eller raderna inuti det kan återställas utan en säkerhetskopia, så kör en SELECT mot målet och bekräfta säkerhetskopian först.
Dropping en kolumn
I ALTER-exemplet ovan lades en kolumn med namnet credit_card_number till i medlemstabellen. Anta att onlinefaktureringsfunktionen är uppskjuten och att den kolumnen ska tas bort igen. Följande skript gör det.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Om skriptet körs tas kolumnen credit_card_number bort från medlemstabellen. Om kolumnerna listas igen bekräftas resultatet.
SHOW COLUMNS FROM `members`;
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| Fullständiga namn | varchar(350) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Kreditkortsnumret är borta från fältlistan.
SLÄPP BORD
Syntaxen för att ta bort en hel tabell från en databas är följande.
DROP TABLE `sample_table`;
Tillämpat på ett verkligt objekt ser påståendet ut så här.
DROP TABLE `categories_archive`;
Om du kör den raderas tabellen med namnet `categories_archive` och varje rad i den från databasen.
SLIP DATABAS
Samma nyckelord tar bort ett helt schema. Om du lägger till IF EXISTS undertrycks felet som MySQL höjs när målet redan är borta, vilket är användbart i skript som körs mer än en gång.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Att ta bort ett objekt är slutgiltigt. När själva objektet ska finnas kvar och endast dess namn är felaktigt, är RENAME-kommandot rätt verktyg.
Vad är RENAME-kommandot i MySQL?
Kommandot RENAME ändrar namnet på ett befintligt databasobjekt, till exempel en tabell eller en kolumn, till ett nytt namn. Att byta namn på en tabell orsakar inte att någon av data som finns i den förloras.
Kommandot har följande grundläggande syntax.
RENAME TABLE `current_table_name` TO `new_table_name`;
För att byta namn på tabellen movierentals till movie_rentals används skriptet nedan.
RENAME TABLE `movierentals` TO `movie_rentals`;
Genom att köra den byter namnet på tabellen `movierentals` till `movie_rentals`. Eftersom bytet av namn bara är en ändring av etiketten återställer samma instruktion, omvänd, det ursprungliga namnet.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE hanterar namnet på en tabell. Att byta namn på en kolumn, och att ändra vad den innehåller, är ett resultat av nyckelordet CHANGE.
ÄNDRA Nyckelord
Nyckelordet CHANGE låter dig
- Ändra namnet på en kolumn
- Ändra kolumndatatypen
- Ändra kolumnbegränsningarna
Ta ett exempel. Fältet full_names i medlemstabellen är av varchar-datatypen med en bredd på 350, vilket skriptet nedan bekräftar.
SHOW COLUMNS FROM `members`;
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| Fullständiga namn | varchar(350) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Anta att kravet är att
- Ändra fältnamnet från "full_names" till "fullname"
- Ändra den till char-datatypen med en bredd på 250
- Lägg till en NOT NULL-begränsning
Alla tre redigeringar utförs med en enda CHANGE-sats.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Att köra det mot myflixdb och sedan köra skriptet SHOW COLUMNS ger följande resultat.
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| fullständiga namn | röding (250) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Kolumnen heter nu fullname, innehåller char(250) och avvisar NULL-värden.
ÄNDRA sökord
Nyckelordet MODIFY låter dig
- Ändra kolumndatatypen
- Ändra kolumnbegränsningarna
I CHANGE-exemplet ovan var fältnamnet tvunget att anges två gånger, trots att namnbytet bara var en del av målet. Att utelämna fältnamnet från en CHANGE-sats genererar ett fel. När endast datatypen och begränsningarna behöver justeras och namnet ska förbli som det är, gör MODIFY jobbet med ett omnämnande av kolumnen.
Skriptet nedan ändrar bredden på fältet "fullname" från 250 till 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Att köra det mot myflixdb och sedan köra skriptet SHOW COLUMNS ger resultatet som visas nedan.
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| fullständiga namn | röding (50) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
⚠️ Varning: Att begränsa en kolumn avkortar data som inte längre passar. Alla namn som är längre än 50 tecken avkortas av detta uttryck, så kontrollera det längsta befintliga värdet med en VÄLJA fråga innan ett fält krymper.
ÄNDRA vs MODIFIERA vs BYT NAMN PÅ KOLUMN
De tre nyckelorden överlappar varandra, och att välja fel är den vanligaste felkällan inom detta område. Tabellen nedan visar dem sida vid sida.
| Nyckelord | Byter namn på kolumnen | Ändrar typ och begränsningar | Gammalt namn krävs | Typisk användning |
|---|---|---|---|---|
| FÖRÄNDRING | Ja | Ja | Ja, plus det nya namnet | Byt namn och omdefiniera i ett enda uttryck |
| ÄNDRA | Nej | Ja | Namn givet en gång | Bredda, begränsa eller skriva om en kolumn |
| BYT NAMN PÅ KOLUMN | Ja | Nej | Ja, plus det nya namnet | Byt endast namn, från MySQL 8.0 och framåt |
MySQL 8.0 lade till ett fjärde alternativ för det enklaste fallet, ett namnbyte utan någon omdefinition alls.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Typ och namn är avgjorda. Den återstående frågan är var en ny kolumn placeras i tabellen, vilket nyckelordet AFTER styr.
EFTER-nyckelord
Som standard hamnar en kolumn som läggs till med ALTER TABLE i slutet av tabellen. För att placera den på en specifik position istället kombineras ALTER-kommandot med AFTER-nyckelordet.
Skriptet nedan lägger till ”date_of_registration” direkt efter date_of_birth i medlemstabellen.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Att köra det mot myflixdb och sedan köra skriptet SHOW COLUMNS ger resultatet som visas nedan.
| Fält | Typ | Null | Nyckel | Standard | extra |
|---|---|---|---|---|---|
| medlemsnummer | int (11) | NEJ | PRI | NULL | automatisk_ökning |
| fullständiga namn | röding (50) | NEJ | NULL | ||
| kön | varchar(6) | JA | NULL | ||
| födelsedatum | datum | JA | NULL | ||
| registreringsdatum | datum | JA | NULL | ||
| fysisk adress | varchar(255) | JA | NULL | ||
| postadress | varchar(255) | JA | NULL | ||
| kontaktnummer | varchar(75) | JA | NULL | ||
| varchar(255) | JA | NULL |
Den markerade raden är kolumnen som läggs till efter date_of_birth. Nyckelordet FIRST fungerar på samma sätt och flyttar den nya kolumnen längst fram i tabellen.
