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.

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.
