MySQL SLET Forespørgsel: Sådan sletter du en række fra tabellen

⚡ Smart opsummering

MySQL DELETE-forespørgslen fjerner rækker, der ikke længere er nødvendige, fra en tabel og returnerer antallet af berørte rækker. Denne ressource forklarer DELETE-syntaks, WHERE-filtrering, sletning af flere rækker med IN og de sikrere alternativer TRUNCATE og DROP.

  • 🗑️ Kerneerklæring: DELETE FROM `tabelnavn` [WHERE-betingelse] fjerner hele rækker og returnerer antallet af slettede rækker.
  • ⚠️ Udeladt HVOR: Hvis du udelader WHERE-klausulen, slettes alle rækker i tabellen, så filtrer altid før udførelse.
  • 🎯 TargetFjernelse: WHERE `movie_id` = 18 fjerner én post, mens WHERE `movie_id` IN (20,21) fjerner flere i en enkelt sætning.
  • 🔁 Irreversibel handling: Slettede data kan ikke gendannes uden en sikkerhedskopi, så sikkerhedskopier databasen, før du kører DELETE.
  • 📊 Omfang på rækkeniveau: DELETE fjerner kun hele rækker; rydning af en enkelt kolonneværdi kræver UPDATE med NULL.
  • ⚖️ SLET vs. AFKORTI vs. SLIP: DELETE filtrerer rækker, TRUNCATE tømmer en tabel med det samme, og DROP fjerner selve tabelstrukturen.

Hvad er SLET-forespørgslen?

MySQL SLET En DELETE-sætning bruges til at fjerne rækker, der ikke længere er nødvendige, fra en databasetabel. Den sletter hele rækken fra tabellen og returnerer antallet af slettede rækker. DELETE-sætningen er praktisk, når du har brug for at slette midlertidige eller forældede data fra din database.

DELETE-forespørgslen i MySQL kan fjerne mere end én række fra en tabel i én udførelse. Dette viser sig at være fordelagtigt, når du fjerner et stort antal rækker fra en databasetabel.

Når en række er blevet slettet, kan den ikke gendannes. Lav altid en sikkerhedskopi af databasen, før du sletter data, så databasen kan gendannes og gennemgås senere, hvis det er nødvendigt.

Sådan sletter du en række i MySQL

Når formålet med sætningen er klart, er næste trin syntaksen. For at slette en række i MySQL, bruges DELETE FROM-sætningen:

DELETE FROM `table_name` [WHERE condition];

HER:

  • SLET FRA `tabelnavn` fortæller MySQL server for at fjerne rækker fra den navngivne tabel.
  • [WHERE-tilstand] er valgfri og bruges til at anvende et filter, der begrænser antallet af rækker, der påvirkes af DELETE-forespørgslen.

Hvis WHERE-klausul bruges ikke i MySQL DELETE-forespørgsel, og derefter alle rækkerne i en given tabel vil blive slettet.

⚠️ Advarsel: Kør filteret først som en SELECT. Hvis det returnerer præcis de rækker, du vil fjerne, er den matchende DELETE sikker. Den fulde syntaks er dokumenteret i MySQL DELETE-opgørelsesmanual.

Eksempel MySQL Slet forespørgsel

Det næste afsnit opbygger et lille datasæt og sletter derefter noget fra det.

Trin 1: Indsæt eksempeldata

Før vi går ind i en mere detaljeret diskussion af SQL DELETE-sætningen, lad os indsætte nogle eksempeldata i film-tabellen, som vi kan arbejde med.

INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7);
INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8);
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);

Ved at udføre ovenstående script tilføjes tre (3) film til filmtabellen. Inden vi går videre, lad os liste alle filmene i vores tabel.

SELECT * FROM `movies`;

Udførelse af ovenstående script giver os følgende resultater. De tre nyligt indsatte rækker er fremhævet.

film_id titel direktør år_udgivet kategori_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Glemte Sarah Marshal Nicholas Stoller 2008 2
3 X-Men NULL 2008 NULL
4 Code Navn Sort Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Engle og dæmoner NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey moonERS John Schultz 2005 8
16 67 % skyldig NULL 2012 NULL
18 The Great Dictator Charlie Chaplin 1940 7
19 eksempelfilm anonym NULL 8
20 film 3 John Brown 1920 8

Trin 2: Slet en enkelt række

Antag at Myflix-videobiblioteket ikke længere ønsker at udleje "Diktatoren" og ønsker den fjernet fra databasen. Dens film-id er 18, så scriptet nedenfor sletter den række.

DELETE FROM `movies` WHERE `movie_id` = 18;

Udførelse af ovenstående script i MySQL Arbejdsbænk mod Myflix-databasen sletter filmen med id 18 fra tabellen.

Lad os nu tjekke den aktuelle status for filmtabellen.

SELECT * FROM `movies`;
film_id titel direktør år_udgivet kategori_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Glemte Sarah Marshal Nicholas Stoller 2008 2
3 X-Men NULL 2008 NULL
4 Code Navn Sort Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Engle og dæmoner NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey moonERS John Schultz 2005 8
16 67 % skyldig NULL 2012 NULL
19 eksempelfilm anonym NULL 8
20 film 3 John Brown 1920 8

BEMÆRK VENLIGST:

  • Filmen med id 18 returneres ikke længere i forespørgselsresultatsættet.
  • Du kan ikke slette en enkelt kolonne fra en tabel med DELETE. Sætningen fjerner en hel række. For at rydde ét felt skal du bruge en UPDATE-forespørgsel der sætter kolonnen til NULL.

Trin 3: Slet flere rækker med IN

Lad os sige, at vi har en liste over film, vi vil slette. I stedet for at køre én sætning pr. række, kan vi kombinere WHERE-klausulen med IN-operatoren.

DELETE FROM `movies` WHERE `movie_id` IN (20,21);

Hvis ovenstående script udføres, slettes filmene med ID'erne 20 og 21 fra vores filmtabel i én omgang.

SLET vs. AFKORTI vs. SLIP ind MySQL

SLET er ikke den eneste måde at fjerne data fra MySQLBegyndere bruger den ofte, når en hurtigere kommando passer bedre, så tabellen nedenfor sammenligner de tre fjernelseskommandoer.

Feature SLET afkorte DROP
Kommandotype DML DDL DDL
WHERE-klausul Understøttet Ikke understøttet Ikke understøttet
Hvad der fjernes Valgte rækker Alle rækker Rækker og tabelstruktur
Tilbagerulning Muligt inden for en transaktion Ikke muligt (implicit commit) Ikke muligt (implicit commit)
AUTO_INCREMENT Tælleren bevares Tælleren nulstilles til startværdien Disken fjernes sammen med bordet
Hastighed på store borde Langsomt (række for række) Meget hurtig Meget hurtig

Brug DELETE, når du har brug for et filter eller muligheden for at rulle tilbage. TRUNCATE TABEL når du hurtigt vil tømme en tabel og nulstille dens AUTO_INCREMENT-tæller. Brug kun DROP, når selve tabellen ikke længere er nødvendig, fordi den fjerner definitionen sammen med dataene.

Ofte Stillede Spørgsmål

Kun inden for en åben transaktion. Kør START TRANSACTION, udfør DELETE, og ROLLBACK for at fortryde den. Efter COMMIT eller med autocommit aktiveret, er rækkerne væk, og kun en sikkerhedskopi kan gendanne dem.

Brug en DELETE-funktion med flere tabeller JOIN, hvor begge tabeller navngives før FROM-nøgleordet. Alternativt kan du definere fremmednøglen med ON DELETE CASCADE, så underordnede rækker fjernes automatisk, når den overordnede række slettes.

Sikker opdateringstilstand er aktiveret som standard i MySQL WorkbenchDen afviser enhver DELETE, hvis WHERE-klausul ikke bruger en nøglekolonne, hvilket forhindrer utilsigtet sletning af hele tabellen. Deaktiver den under Rediger > Indstillinger > SQL Editor.

Ja. AI-assistenter oversætter en anmodning på almindeligt engelsk til DELETE-syntaks og kan forklare WHERE-klausulen. Gennemgå altid det genererede filter mod en SELECT først, da en AI-model ikke kan se dine livedata.

Nej. Lad AI udarbejde sætningen, men udfør den selv på en sikkerhedskopi eller en midlertidig kopi først. En manglende WHERE-klausul sletter alle rækker, og intet AI-værktøj kan fortryde det, når transaktionen er committet.

Opsummer dette indlæg med: