MySQL DELETE Fråga: Hur man tar bort en rad från tabell

⚡ Smart sammanfattning

MySQL DELETE-frågan tar bort rader som inte längre behövs från en tabell och returnerar antalet berörda rader. Den här resursen förklarar DELETE-syntax, WHERE-filtrering, borttagning av flera rader med IN och de säkrare alternativen TRUNCATE och DROP.

  • 🗑️ Kärnutlåtande: DELETE FROM `tabellnamn` [WHERE-villkor] tar bort hela rader och returnerar antalet raderade rader.
  • ⚠️ Utelämnad VAR: Om du utelämnar WHERE-klausulen raderas alla rader i tabellen, så filtrera alltid innan du kör.
  • 🎯 TargetBorttagning: WHERE `movie_id` = 18 tar bort en post, medan WHERE `movie_id` IN (20,21) tar bort flera i en enda sats.
  • 🔁 Oåterkallelig åtgärd: Raderad data kan inte återställas utan en säkerhetskopia, säkerhetskopiera därför databasen innan du kör DELETE.
  • 📊 Omfattning på radnivå: DELETE tar bara bort hela rader; att rensa ett enskilt kolumnvärde kräver UPDATE med NULL.
  • ⚖️ TA BORT vs AVKRYP vs SLÄPP: DELETE filtrerar rader, TRUNCATE tömmer en tabell direkt och DROP tar bort själva tabellstrukturen.

Vad är DELETE-frågan?

Ocuco-landskapet MySQL RADERA En DELETE-sats används för att ta bort rader som inte längre behövs från en databastabell. Den tar bort hela raden från tabellen och returnerar antalet borttagna rader. DELETE-satsen är praktisk när du behöver rensa tillfälliga eller föråldrade data från din databas.

DELETE-frågan i MySQL kan ta bort mer än en rad från en tabell i en enda körning. Detta visar sig vara fördelaktigt när du tar bort ett stort antal rader från en databastabell.

När en rad har tagits bort kan den inte återställas. Gör alltid en säkerhetskopia av databasen innan du tar bort data, så att databasen kan återställas och granskas senare om det behövs.

Hur man tar bort en rad i MySQL

Med syftet med satsen tydligt är nästa steg syntaxen. För att ta bort en rad i MySQL, används DELETE FROM-satsen:

DELETE FROM `table_name` [WHERE condition];

HÄR:

  • TA BORT FRÅN `tabellnamn` berättar MySQL servern för att ta bort rader från den namngivna tabellen.
  • [WHERE-tillstånd] är valfritt och används för att tillämpa ett filter som begränsar antalet rader som påverkas av DELETE-frågan.

Om VAR klausul används inte i MySQL DELETE-frågan, sedan Alla Produkter Raderna i en given tabell kommer att raderas.

⚠️ Varning: Kör filtret som en SELECT först. Om det returnerar exakt de rader du vill ta bort, är matchande DELETE säker. Fullständig syntax finns dokumenterad i MySQL DELETE-utdragsmanual.

Exempel på MySQL Ta bort fråga

Nästa avsnitt bygger en liten datamängd och tar sedan bort data från den.

Steg 1: Infoga exempeldata

Innan vi går in på en mer detaljerad diskussion om SQL DELETE-satsen, låt oss infoga lite exempeldata i filmtabellen att arbeta 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);

Genom att köra ovanstående skript läggs tre (3) filmer till i filmtabellen. Innan vi går vidare, låt oss lista alla filmer i vår tabell.

SELECT * FROM `movies`;

Om vi ​​kör ovanstående skript får vi följande resultat. De tre nyligen infogade raderna är markerade.

movie_id rubricerade direktör year_released kategori_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Att glömma Sarah Marshal Nicholas Stoller 2008 2
3 X-Män NULL 2008 NULL
4 Code Namn Svart Edgar Jimz 2010 NULL
5 Pappas små flickor NULL 2007 8
6 Änglar och demoner NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey moonERS John Schultz 2005 8
16 67 % skyldig NULL 2012 NULL
18 Diktatorn Charlie Chaplin 1940 7
19 exempelfilm Anonym NULL 8
20 film 3 John Brown 1920 8

Steg 2: Ta bort en enda rad

Anta att Myflix videobibliotek inte längre vill hyra ut "Diktatorn" och vill att den ska tas bort från databasen. Dess film-ID är 18, så skriptet nedan tar bort den raden.

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

Exekvera skriptet ovan i MySQL Arbetsbänk mot Myflix-databasen raderar filmen med id 18 från tabellen.

Låt oss nu kontrollera filmtabellens aktuella tillstånd.

SELECT * FROM `movies`;
movie_id rubricerade direktör year_released kategori_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Att glömma Sarah Marshal Nicholas Stoller 2008 2
3 X-Män NULL 2008 NULL
4 Code Namn Svart Edgar Jimz 2010 NULL
5 Pappas små flickor NULL 2007 8
6 Änglar och demoner NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey moonERS John Schultz 2005 8
16 67 % skyldig NULL 2012 NULL
19 exempelfilm Anonym NULL 8
20 film 3 John Brown 1920 8

OBS:

  • Filmen med id 18 returneras inte längre i frågeresultatet.
  • Du kan inte ta bort en enskild kolumn från en tabell med DELETE. Satsen tar bort en hel rad. För att rensa ett fält, använd en UPDATE-fråga som sätter kolumnen till NULL.

Steg 3: Ta bort flera rader med IN

Låt oss säga att vi har en lista med filmer som vi vill ta bort. Istället för att köra en sats per rad kan vi kombinera WHERE-satsen med IN-operatorn.

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

Genom att köra ovanstående skript raderas filmerna med ID:na 20 och 21 från vår filmtabell i ett svep.

TA BORT vs AVKRYP vs SLÄPP in MySQL

TA BORT är inte det enda sättet att ta bort data från MySQLNybörjare använder det ofta när ett snabbare kommando passar bättre, så tabellen nedan jämför de tre borttagningskommandona.

Leverans RADERA STYMPA FALLA
Kommandotyp DML DDL DDL
VAR klausul Som stöds Stöds inte Stöds inte
Vad som tas bort Valda rader Alla rader Rader och tabellstruktur
rollback Möjligt inom en transaktion Inte möjligt (implicit commit) Inte möjligt (implicit commit)
AUTO_INCREMENT Räknaren behålls Räknaren återställs till startvärdet Disken tas bort tillsammans med bordet
Hastighet på stora bord Långsamt (rad för rad) Mycket snabb Mycket snabb

Använd DELETE när du behöver ett filter eller möjligheten att återställa. TRUNCATE BORD när du vill tömma en tabell snabbt och återställa dess AUTO_INCREMENT-räknare. Använd DROP endast när själva tabellen inte längre behövs, eftersom definitionen tillsammans med data tas bort.

Vanliga frågor

Endast inom en öppen transaktion. Kör START TRANSACTION, kör DELETE och ångra sedan ROLLBACK. Efter COMMIT eller med autocommit aktiverat är raderna borta och endast en säkerhetskopia kan återställa dem.

Använd en DELETE för flera tabeller med en JOIN, och namnge båda tabellerna före FROM-nyckelordet. Alternativt kan du definiera den främmande nyckeln med ON DELETE CASCADE så att underordnade rader tas bort automatiskt när överordnade rader tas bort.

Säkert uppdateringsläge är aktiverat som standard i MySQL ArbetsbänkDen avvisar alla DELETE vars WHERE-klausul inte använder en nyckelkolumn, vilket förhindrar oavsiktliga raderingar av hela tabellen. Inaktivera den under Redigera > Inställningar > SQL-redigeraren.

Ja. AI-assistenter översätter en begäran på vanlig engelska till DELETE-syntax och kan förklara WHERE-klausulen. Granska alltid det genererade filtret mot en SELECT-klausul först, eftersom en AI-modell inte kan se dina livedata.

Nej. Låt AI utarbeta satsen, men kör den själv på en säkerhetskopia eller mellanlagringskopia först. En saknad WHERE-sats raderar varje rad, och inget AI-verktyg kan återställa det när transaktionen väl har genomförts.

Sammanfatta detta inlägg med: