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.

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 å
- Slett en database fra MySQL server.
- 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
- Endre navnet på en kolonne
- Endre datatypen for kolonnen
- 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 å
- Endre feltnavnet fra «full_names» til «fullname»
- Endre den til char-datatypen med en bredde på 250
- 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
- Endre kolonnedatatypen
- 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.
