MYSQL – ÆNDRING, DROP, OMDØB, ÆNDRING

⚡ Smart opsummering

ÆNDRE, SLIP, OMDØB og MODIFICER er MySQL Kommandoer, der omformer en database, efter den allerede er i brug. De tilføjer, fjerner, omdøber og omdefinerer objekter såsom tabeller og kolonner uden at kassere de rækker, der allerede er gemt.

  • 🛠️ ALTER-kommando: ALTER TABLE omdefinerer et objekt, der allerede eksisterer, så et live-skema absorberer nye krav uden en genopbygning.
  • ➕ TILFØJ KOLONNE: ALTER TABLE ADD COLUMN tilføjer et felt, og de eksisterende rækker beholder alle de værdier, de allerede indeholdt.
  • 🗑️ DROP-kommando: DROP sletter permanent: en database, en tabel eller en enkelt kolonne via ALTER TABLE DROP COLUMN.
  • 🔁 RENAME-kommando: RENAME TABLE ændrer kun navnet på en tabel, og ingen data i den går tabt.
  • ✏️ ÆNDR søgeord: CHANGE omdøber en kolonne og omdefinerer dens type og begrænsninger i én sætning, så begge kolonnenavne er påkrævede.
  • 🧩 ÆNDRE søgeord: MODIFY ændrer typen og begrænsningerne, mens keeping navnet, det sikrere valg til en redigering kun med typeafsnit.
  • 📍 EFTER Nøgleord: AFTER placerer en nyligt tilføjet kolonne på en valgt position i stedet for i slutningen af ​​tabellen.

MySQL ÆNDRE, SLIP, OMDØB og MODIFICER

Hvad er ALTER-kommandoen i MySQL?

ÆNDRE En kommando ændrer en eksisterende database, tabel, visning eller andet databaseobjekt, der skal ændres i løbet af en databases livscyklus. Det er den kommando, der lader et skema udvikle sig, efter at det allerede er oprettet og fyldt med data.

Forretningskrav står sjældent stille, og et databasedesign skal følge med dem. Forestil dig, at designet til Myflix-databasen er blevet implementeret, og at brugerne arbejder med den, og først da indser teamet, at vigtige oplysninger er blevet udeladt. Ingen ønsker at miste de eksisterende rækker; de vil blot registrere de nye oplysninger ved siden af ​​dem.

ALTER dækker præcis den situation. Det kan ændre datatypen for et felt fra en streng til et tal, omdøbe et felt eller tilføje en helt ny kolonne til en tabel, alt imens de data, der allerede er gemt i tabellen, forbliver intakte.

Når formålet med kommandoen er etableret, er det næste trin syntaksen, der udfører den.

MySQL ALTER-syntaks

Den grundlæggende syntaks, der bruges til at tilføje en kolonne til en tabel, der allerede findes, er vist nedenfor.

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

HER

  • "ÆNDRE TABEL `tabel_navn`" er kommandoen der fortæller MySQL server for at ændre tabellen med navnet `table_name`.
  • "ADD COLUMN `column_name` `data_type`" er kommandoen der fortæller MySQL serveren for at tilføje en ny kolonne med navnet `kolonnenavn` med datatypen `datatype`.

Antag, at Myflix har introduceret online fakturering og betalinger. For at understøtte dette skal der tilføjes et felt til kreditkortnummeret til medlemstabellen. Før der foretages ændringer, er det værd at se på tabellens struktur, som den ser ud nu. Scriptet vist nedenfor gør det.

SHOW COLUMNS FROM `members`;
Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde_navne varchar(350) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL

💡 Bemærkning om int(11): Tallet i parentes er kun en visningsbredde. MySQL 8.0.17 udfasede det for heltalstyper, så en moderne server rapporterer denne kolonne blot som intLagerpladsens størrelse er uændret.

Scriptet vist nedenfor tilføjer det nye felt til medlemstabellen.

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

Hvis dette script udføres mod myflixdb, tilføjes en kolonne med navnet credit_card_number til medlemstabellen med VARCHAR som datatype. Hvis SHOW COLUMNS-scriptet køres igen, får du følgende resultat.

Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde_navne varchar(350) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL
kreditkortnummer varchar(25) JA NULL

Den fremhævede række bekræfter, at credit_card_number er blevet tilføjet til medlemstabellen, og at dataene, der allerede findes i de andre kolonner, ikke påvirkes af tilføjelsen.

At tilføje en kolonne er kun halvdelen af ​​historien. Et skema skal også fjerne objekter, det ikke længere har brug for, hvilket er DROP-kommandoens opgave.

Hvad er DROP-kommandoen i MySQL?

DROP-kommandoen sletter et objekt permanent. Den bruges til at

  1. Slet en database fra MySQL server.
  2. Slet et objekt, f.eks. en tabel eller en kolonne, fra en database.

⚠️ Advarsel: DROP kan ikke reverseres. Hverken objektet eller rækkerne i det kan gendannes uden en sikkerhedskopi, så kør en SELECT mod målet og bekræft sikkerhedskopien først.

Dropping en kolonne

I ALTER-eksemplet ovenfor blev en kolonne med navnet credit_card_number tilføjet til medlemstabellen. Antag, at onlinefaktureringsfunktionen er udskudt, og at den kolonne skal fjernes igen. Følgende script gør det.

ALTER TABLE `members` DROP COLUMN `credit_card_number`;

Når scriptet udføres, fjernes kolonnen credit_card_number fra medlemstabellen. Når kolonnerne vises igen, bekræftes resultatet.

SHOW COLUMNS FROM `members`;
Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde_navne varchar(350) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL

Kreditkortnummeret er væk fra feltlisten.

DROP TABEL

Syntaksen til at slette en hel tabel fra en database er som følger.

DROP TABLE `sample_table`;

Anvendt på et virkeligt objekt ser udsagnet således ud.

DROP TABLE `categories_archive`;

Hvis den udføres, slettes tabellen med navnet `categories_archive` og alle rækker i den fra databasen.

SLIP DATABASE

Det samme nøgleord fjerner et helt skema. Tilføjelse af IF EXISTS undertrykker fejlen, der MySQL hæves, når målet allerede er væk, hvilket er nyttigt i scripts, der kører mere end én gang.

DROP DATABASE IF EXISTS `myflixdb_backup`;

Fjernelse af et objekt er endelig. Når selve objektet skal bevares, og kun dets navn er forkert, er RENAME-kommandoen det korrekte værktøj.

Hvad er RENAME-kommandoen i MySQL?

Kommandoen RENAME ændrer navnet på et eksisterende databaseobjekt, f.eks. en tabel eller en kolonne, til et nyt navn. Omdøbning af en tabel medfører ikke, at den mister nogen af ​​de data, der er indeholdt i den.

Kommandoen har følgende grundlæggende syntaks.

RENAME TABLE `current_table_name` TO `new_table_name`;

For at omdøbe tabellen movierentals til movie_rentals bruges scriptet nedenfor.

RENAME TABLE `movierentals` TO `movie_rentals`;

Hvis den udføres, omdøbes tabellen `movierentals` til `movie_rentals`. Da omdøbningen kun er en ændring af etiketten, gendanner den samme sætning, hvis den omvendt udføres, det oprindelige navn.

RENAME TABLE `movie_rentals` TO `movierentals`;

RENAME TABLE håndterer navnet på en tabel. Omdøbning af en kolonne, og at ændre, hvad den indeholder, er et resultat af nøgleordet CHANGE.

ÆNDR søgeord

Nøgleordet CHANGE giver dig mulighed for at

  1. Ændre navnet på en kolonne
  2. Ændr kolonnens datatype
  3. Ændr kolonnebegrænsningerne

Overvej et eksempel. Feltet full_names i medlemstabellen er af varchar-datatypen med en bredde på 350, som scriptet nedenfor bekræfter.

SHOW COLUMNS FROM `members`;
Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde_navne varchar(350) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL

Antag at kravet er at

  1. Skift feltnavnet fra "fulde_navne" til "fuldt_navn"
  2. Skift den til char-datatypen med en bredde på 250
  3. Tilføj en NOT NULL-begrænsning

Alle tre redigeringer udføres af en enkelt CHANGE-sætning.

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

At udføre det mod myflixdb og derefter køre SHOW COLUMNS-scriptet giver følgende resultat.

Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde navn røye (250) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL

Kolonnen kaldes nu fullname, indeholder char(250) og afviser NULL-værdier.

ÆNDRE søgeord

Nøgleordet MODIFY giver dig mulighed for at

  1. Rediger kolonnedatatypen
  2. Rediger kolonnebegrænsningerne

I CHANGE-eksemplet ovenfor skulle feltnavnet angives to gange, selvom omdøbningen kun var en del af målet. Hvis feltnavnet udelades fra en CHANGE-sætning, genereres der en fejl. Når kun datatypen og begrænsningerne skal justeres, og navnet skal forblive, som det er, klarer MODIFY jobbet med én omtale af kolonnen.

Scriptet nedenfor ændrer bredden af ​​feltet "fuldt navn" fra 250 til 50.

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

Hvis du udfører det mod myflixdb og derefter kører scriptet SHOW COLUMNS, får du resultatet vist nedenfor.

Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde navn røye (50) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL

⚠️ Advarsel: Indsnævring af en kolonne afkorter data, der ikke længere passer. Ethvert navn, der er længere end 50 tegn, afkortes af denne sætning, så tjek den længste eksisterende værdi med en SELECT forespørgsel før et felt krymper.

ÆNDRE vs. MODIFICER vs. OMDØB KOLONNE

De tre søgeord overlapper hinanden, og at vælge det forkerte søgeord er den mest almindelige kilde til fejl på dette område. Tabellen nedenfor viser dem side om side.

Søgeord Omdøber kolonnen Ændrer type og begrænsninger Gammelt navn påkrævet Typisk brug
CHANGE Ja Ja Ja, plus det nye navn Omdøb og omdefiner i én sætning
MODIFICERE Ingen Ja Navn givet én gang Udvid, indsnævre eller omskriv en kolonne
OMDØB KOLONNE Ja Ingen Ja, plus det nye navn Omdøb kun, fra MySQL 8.0 og fremefter

MySQL 8.0 tilføjede en fjerde mulighed for det enkleste tilfælde, et omdøb uden nogen omdefinering overhovedet.

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

Type og navn er afgjort. Det resterende spørgsmål er, hvor en ny kolonne skal placeres i tabellen, hvilket AFTER-nøgleordet styrer.

EFTER-nøgleord

Som standard lander en kolonne tilføjet med ALTER TABLE i slutningen af ​​tabellen. For at placere den på en bestemt position i stedet kombineres ALTER-kommandoen med AFTER-nøgleordet.

Scriptet nedenfor tilføjer "date_of_registration" direkte efter date_of_birth i medlemstabellen.

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

Hvis du udfører det mod myflixdb og derefter kører scriptet SHOW COLUMNS, får du resultatet vist nedenfor.

Felt Type Null Nøgle Standard Ekstra
medlemsnummer int (11) INGEN PRI NULL automatisk_forøgelse
fulde navn røye (50) INGEN NULL
køn varchar(6) JA NULL
fødselsdato dato JA NULL
registreringsdato dato JA NULL
fysisk adresse varchar(255) JA NULL
postadresse varchar(255) JA NULL
kontaktnummer varchar(75) JA NULL
e-mail varchar(255) JA NULL

Den fremhævede række er den kolonne, der tilføjes efter fødselsdato. Nøgleordet FIRST fungerer på samme måde og flytter den nye kolonne helt til forrest i tabellen.

Ofte Stillede Spørgsmål

Nej. DDL-sætninger som ALTER, DROP og RENAME committes implicit i MySQL, så en åben transaktion kan ikke fortrydes. Gendannelse fra en sikkerhedskopi er den eneste vej tilbage.

Det afhænger af ændringen. Mange InnoDB-ændringer kører online og tillader samtidig læsning og skrivning, mens andre kopierer hele tabellen og blokerer skrivninger. Tilføj ALGORITHM- og LOCK-klausuler for at angive, hvad du vil acceptere.

DROP fjerner selve objektet. TRUNCATE tømmer en tabel, men bevarer dens struktur. SLET fjerner markerede rækker og kan filtreres med en WHERE-klausul.

Normalt ja. AI-assistenter indbygget i klienter som f.eks. MySQL Workbench Omdan en anmodning som "tilføj en nullbar datokolonne efter fødselsdato" til gyldig syntaks. RevSe den genererede sætning mod det aktive skema, før du kører den.

Kun delvist. AI-gennemgangsværktøjer markerer åbenlyse risici, såsom en slettet kolonne, der stadig er navngivet i en forespørgsel, eller en indsnævret type, der afkorter data. De kan ikke se alle kaldere, så en staging-kørsel er fortsat nødvendig.

Opsummer dette indlæg med: