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.

  • 🛠️ ALTER-kommando: ALTER TABLE omdefinierar ett objekt som redan finns, så ett live-schema absorberar nya krav utan en ombyggnad.
  • LÄGG TILL KOLUMN: ALTER TABLE ADD COLUMN lägger till ett fält, och de befintliga raderna behåller alla värden de redan innehöll.
  • 🗑️ DROP-kommando: DROP tar bort permanent: en databas, en tabell eller en enskild kolumn genom ALTER TABLE DROP COLUMN.
  • 🔁 RENAME-kommando: BYT NAMN PÅ TABELL ändrar bara namnet på en tabell, och ingen data i den går förlorad.
  • ✏️ ÄNDRA Nyckelord: CHANGE byter namn på en kolumn och omdefinierar dess typ och begränsningar i en sats, så båda kolumnnamnen är obligatoriska.
  • 🧩 ÄNDRA Nyckelord: MODIFY ändrar typen och begränsningarna medan keeping namnet, det säkrare valet för en endast-typredigering.
  • 📍 EFTER Nyckelord: AFTER placerar en nyligen tillagd kolumn på en vald position istället för i slutet av tabellen.

MySQL ÄNDRING, TA BORT, BYT NAMN och MODIFIERA

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
e-mail 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
e-mail 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

  1. Ta bort en databas från MySQL server.
  2. 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
e-mail 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

  1. Ändra namnet på en kolumn
  2. Ändra kolumndatatypen
  3. Ä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
e-mail varchar(255) JA NULL

Anta att kravet är att

  1. Ändra fältnamnet från "full_names" till "fullname"
  2. Ändra den till char-datatypen med en bredd på 250
  3. 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
e-mail 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

  1. Ändra kolumndatatypen
  2. Ä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
e-mail 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
e-mail 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.

Vanliga frågor

Nej. DDL-satser som ALTER, DROP och RENAME görs implicit i MySQL, så en öppen transaktion kan inte ångras. Att återställa från en säkerhetskopia är den enda vägen tillbaka.

Det beror på ändringen. Många InnoDB-ändringar körs online och tillåter samtidig läsning och skrivning, medan andra kopierar hela tabellen och blockerar skrivningar. Lägg till ALGORITHM- och LOCK-klausuler för att ange vad du kommer att acceptera.

DROP tar bort själva objektet. TRUNCATE tömmer en tabell men behåller dess struktur. RADERA tar bort markerade rader och kan filtreras med en WHERE-klausul.

Vanligtvis, ja. AI-assistenter inbyggda i klienter som MySQL Arbetsbänk omvandla en begäran som "lägg till en nullvärdig datumkolumn efter date_of_birth" till giltig syntax. RevVisa den genererade satsen mot det aktiva schemat innan du kör den.

Bara delvis. AI-granskningsverktyg flaggar uppenbara risker, såsom en borttagen kolumn som fortfarande namnges i en fråga eller en begränsad typ som avkortar data. De kan inte se alla anropare, så en staging-körning är fortfarande nödvändig.

Sammanfatta detta inlägg med: