MYSQL – ENDRE, DROPPE, ENDRE navn, ENDRE

⚡ Smart oppsummering

ENDRE, SLIPPE, GI NYTT NAVN og MODIFISERE er MySQL Kommandoer som omformer en database etter at den allerede er i bruk. De legger til, fjerner, gir nytt navn til og omdefinerer objekter som tabeller og kolonner uten å forkaste radene som allerede er lagret.

  • 🛠️ ALTER-kommando: ALTER TABLE omdefinerer et objekt som allerede eksisterer, slik at et live-skjema absorberer nye krav uten en gjenoppbygging.
  • LEGG TIL KOLONNE: ALTER TABLE ADD COLUMN legger til et felt, og de eksisterende radene beholder alle verdiene de allerede inneholdt.
  • 🗑️ DROP-kommando: DROP sletter permanent: en database, en tabell eller en enkelt kolonne gjennom ALTER TABLE DROP COLUMN.
  • 🔁 RENAME-kommando: RENAME TABLE endrer bare navnet på en tabell, og ingen data i den går tapt.
  • ✏️ ENDRE Nøkkelord: CHANGE gir en kolonne nytt navn og omdefinerer dens type og begrensninger i én setning, så begge kolonnenavnene er obligatoriske.
  • 🧩 ENDR nøkkelord: MODIFY endrer typen og begrensningene mens keeping navnet, det tryggere valget for en redigering kun av type.
  • 📍 ETTER Nøkkelord: AFTER plasserer en nylig tillagt kolonne på en valgt posisjon i stedet for på slutten av tabellen.

MySQL ENDRE, SLETTE, GI NYTT NAVN og MODIFISERE

Hva er ALTER-kommandoen i MySQL?

Ocuco ENDRE En kommando endrer en eksisterende database, tabell, visning eller annet databaseobjekt som må endres i løpet av databasens livssyklus. Det er kommandoen som lar et skjema utvikle seg etter at det allerede er opprettet og fylt med data.

Forretningskrav står sjelden stille, og et databasedesign må følge med dem. La oss si at designet for Myflix-databasen er implementert og brukerne jobber med den, og først da innser teamet at viktig informasjon ble utelatt. Ingen ønsker å miste de eksisterende radene; de ​​vil bare registrere den nye informasjonen ved siden av dem.

ALTER dekker akkurat den situasjonen. Den kan endre datatypen til et felt fra en streng til et tall, gi nytt navn til et felt eller legge til en helt ny kolonne i en tabell, samtidig som dataene som allerede er lagret i tabellen forblir intakte.

Når formålet med kommandoen er etablert, er neste trinn syntaksen som utfører den.

MySQL ALTER-syntaks

Den grunnleggende syntaksen som brukes for å legge til en kolonne i en tabell som allerede finnes, vises nedenfor.

ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;

HER

  • "ENDRE TABELL `tabellnavn`" er kommandoen som forteller MySQL server for å endre tabellen kalt `tabellnavn`.
  • "ADD COLUMN `column_name` `data_type`" er kommandoen som forteller MySQL serveren for å legge til en ny kolonne med navnet `kolonnenavn` med datatypen `datatype`.

Anta at Myflix har introdusert nettbasert fakturering og betaling. For å støtte dette må et felt for kredittkortnummer legges til i medlemstabellen. Før du gjør noen endringer, er det verdt å se på strukturen i tabellen slik den er. Skriptet vist nedenfor gjør det.

SHOW COLUMNS FROM `members`;
Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fulle_navn varchar(350) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL

💡 Merknad om int(11): Tallet i parentes er bare en skjermbredde. MySQL 8.0.17 avskaffet den for heltallstyper, så en moderne server rapporterer denne kolonnen ganske enkelt som intLagringsstørrelsen er uendret.

Skriptet som vises nedenfor legger til det nye feltet i medlemstabellen.

ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);

Hvis dette skriptet kjøres mot myflixdb, legges en kolonne med navnet credit_card_number til medlemstabellen med VARCHAR som datatype. Hvis du kjører SHOW COLUMNS-skriptet på nytt, får du følgende resultat.

Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fulle_navn varchar(350) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL
kredittkortnummer varchar(25) JA NULL

Den uthevede raden bekrefter at kredittkortnummer er lagt til i medlemstabellen, og dataene som allerede finnes i de andre kolonnene, berøres ikke av tillegget.

Å legge til en kolonne er bare halve historien. Et skjema må også kvitte seg med objekter det ikke lenger trenger, noe som er DROP-kommandoens jobb.

Hva er DROP-kommandoen i MySQL?

DROP-kommandoen sletter et objekt permanent. Den brukes til å

  1. Slett en database fra MySQL server.
  2. Slett et objekt, for eksempel en tabell eller en kolonne, fra en database.

⚠️ Advarsel: DROP kan ikke reverseres. Verken objektet eller radene i det kan gjenopprettes uten en sikkerhetskopi, så kjør en SELECT mot målet og bekreft sikkerhetskopien først.

Dropping en kolonne

I ALTER-eksemplet ovenfor ble en kolonne med navnet kredittkortnummer lagt til i medlemstabellen. Anta at nettfaktureringsfunksjonen er utsatt, og at den kolonnen bør fjernes igjen. Følgende skript gjør det.

ALTER TABLE `members` DROP COLUMN `credit_card_number`;

Hvis skriptet kjøres, fjernes kolonnen kredittkortnummer fra medlemstabellen. Hvis kolonnene listes opp på nytt, bekreftes resultatet.

SHOW COLUMNS FROM `members`;
Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fulle_navn varchar(350) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL

Kredittkortnummeret er borte fra feltlisten.

DROPPE BORD

Syntaksen for å slette en hel tabell fra en database er som følger.

DROP TABLE `sample_table`;

Anvendt på et reelt objekt, ser utsagnet slik ut.

DROP TABLE `categories_archive`;

Hvis du kjører den, slettes tabellen med navnet `categories_archive` og alle radene i den fra databasen.

DROPPE DATABASE

Det samme nøkkelordet fjerner et helt skjema. Hvis du legger til IF EXISTS, undertrykkes feilen som MySQL heves når målet allerede er borte, noe som er nyttig i skript som kjører mer enn én gang.

DROP DATABASE IF EXISTS `myflixdb_backup`;

Å fjerne et objekt er endelig. Når selve objektet skal bestå, og bare navnet er feil, er RENAME-kommandoen det riktige verktøyet.

Hva er RENAME-kommandoen i MySQL?

RENAME-kommandoen endrer navnet på et eksisterende databaseobjekt, for eksempel en tabell eller en kolonne, til et nytt navn. Å gi en tabell nytt navn fører ikke til at dataene i den går tapt.

Kommandoen har følgende grunnleggende syntaks.

RENAME TABLE `current_table_name` TO `new_table_name`;

For å gi nytt navn til tabellen movierentals til movie_rentals, brukes skriptet nedenfor.

RENAME TABLE `movierentals` TO `movie_rentals`;

Hvis du kjører den, endres navnet på tabellen `movierentals` til `movie_rentals`. Fordi omdøpingen bare er en endring av etikett, gjenoppretter den samme setningen det opprinnelige navnet når den reverseres.

RENAME TABLE `movie_rentals` TO `movierentals`;

RENAME TABLE håndterer navnet på en tabell. Å gi nytt navn til en kolonne, og å endre hva den inneholder, er arbeidet til ENDRE nøkkelordet.

ENDRE nøkkelord

Nøkkelordet CHANGE lar deg

  1. Endre navnet på en kolonne
  2. Endre datatypen for kolonnen
  3. Endre kolonnebegrensningene

Tenk deg et eksempel. Feltet full_names i medlemstabellen er av varchar-datatypen med en bredde på 350, noe skriptet nedenfor bekrefter.

SHOW COLUMNS FROM `members`;
Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fulle_navn varchar(350) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL

Anta at kravet er å

  1. Endre feltnavnet fra «full_names» til «fullname»
  2. Endre den til char-datatypen med en bredde på 250
  3. Legg til en NOT NULL-begrensning

Alle tre redigeringene utføres av én CHANGE-setning.

ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;

Å kjøre den mot myflixdb og deretter kjøre SHOW COLUMNS-skriptet gir følgende resultat.

Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fullt navn char(250) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL

Kolonnen heter nå fullname, inneholder char(250) og avviser NULL-verdier.

ENDR nøkkelord

Nøkkelordet MODIFY lar deg

  1. Endre kolonnedatatypen
  2. Endre kolonnebegrensningene

I CHANGE-eksemplet ovenfor måtte feltnavnet oppgis to ganger, selv om nytt navn bare var en del av målet. Hvis feltnavnet utelates fra en CHANGE-setning, genereres det en feil. Når bare datatypen og begrensningene trenger å justeres, og navnet skal forbli som det er, gjør MODIFY jobben med én omtale av kolonnen.

Skriptet nedenfor endrer bredden på feltet «fullt navn» fra 250 til 50.

ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;

Å kjøre den mot myflixdb og deretter kjøre SHOW COLUMNS-skriptet gir resultatet som vises nedenfor.

Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fullt navn char(50) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL

⚠️ Advarsel: Å begrense en kolonne avkorter data som ikke lenger passer. Alle navn som er lengre enn 50 tegn blir avkortet av denne setningen, så sjekk den lengste eksisterende verdien med en VELG spørring før et felt krymper.

ENDRE vs. MODIFISERE vs. GI KOLONNENAVN

De tre nøkkelordene overlapper hverandre, og å velge feil nøkkelord er den vanligste kilden til feil på dette området. Tabellen nedenfor viser dem side om side.

søkeord Gir kolonnen nytt navn Endrer type og begrensninger Gammelt navn kreves Typisk bruk
ENDRE Ja Ja Ja, pluss det nye navnet Gi nytt navn og omdefiner i én setning
MODIFISER Nei Ja Navn gitt én gang Utvide, begrense eller skrive inn en kolonne på nytt
ENDR NAVN PÅ KOLONNE Ja Nei Ja, pluss det nye navnet Bare gi nytt navn, fra MySQL 8.0 og fremover

MySQL 8.0 la til et fjerde alternativ for det enkleste tilfellet, et nytt navn uten omdefinering i det hele tatt.

ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;

Type og navn er avgjort. Det gjenværende spørsmålet er hvor en ny kolonne plasseres i tabellen, som AFTER-nøkkelordet kontrollerer.

ETTER-nøkkelord

Som standard havner en kolonne som er lagt til med ALTER TABLE på slutten av tabellen. For å plassere den på en bestemt posisjon i stedet, kombineres ALTER-kommandoen med AFTER-nøkkelordet.

Skriptet nedenfor legger til «registreringsdato» rett etter fødselsdato i medlemstabellen.

ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;

Å kjøre den mot myflixdb og deretter kjøre SHOW COLUMNS-skriptet gir resultatet som vises nedenfor.

Felt typen Null nøkkel Misligholde ekstra
medlemsnummer int (11) NEI PRI NULL automatisk_økning
fullt navn char(50) NEI NULL
kjønn varchar(6) JA NULL
fødselsdato data JA NULL
registreringsdato data JA NULL
fysisk_adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
emalje varchar(255) JA NULL

Den uthevede raden er kolonnen som legges til etter fødselsdato. Nøkkelordet FIRST fungerer på samme måte og flytter den nye kolonnen helt frem i tabellen.

Spørsmål og svar

Nei. DDL-setninger som ALTER, DROP og RENAME utføres implisitt i MySQL, så en åpen transaksjon kan ikke angre dem. Gjenoppretting fra en sikkerhetskopi er den eneste veien tilbake.

Det avhenger av endringen. Mange InnoDB-endringer kjører online og tillater samtidig lesing og skriving, mens andre kopierer hele tabellen og blokkerer skriving. Legg til ALGORITHM- og LOCK-klausuler for å angi hva du vil godta.

DROP fjerner selve objektet. TRUNCATE tømmer en tabell, men beholder strukturen. SLETT fjerner valgte rader og kan filtreres med en WHERE-klausul.

Vanligvis ja. AI-assistenter innebygd i klienter som MySQL Workbench Gjør en forespørsel som «legg til en nullbar datokolonne etter fødselsdato» om til gyldig syntaks. RevVis den genererte setningen mot det aktive skjemaet før du kjører den.

Bare delvis. AI-gjennomgangsverktøy markerer åpenbare risikoer, for eksempel en fjernet kolonne som fortsatt er navngitt i en spørring eller en innsnevret type som avkorter data. De kan ikke se alle anropere, så en oppsamlingskjøring er fortsatt nødvendig.

Oppsummer dette innlegget med: