MySQL DELETE Query: Jak odstranit řádek z tabulky

⚡ Chytré shrnutí

MySQL Dotaz DELETE odstraní z tabulky řádky, které již nejsou potřeba, a vrátí počet dotčených řádků. Tento zdroj vysvětluje syntaxi příkazu DELETE, filtrování WHERE, mazání více řádků pomocí IN a bezpečnější alternativy TRUNCATE a DROP.

  • 🗑️ Základní prohlášení: DELETE FROM `table_name` [podmínka WHERE] odstraní celé řádky a vrátí počet smazaných řádků.
  • ⚠️ Vynecháno KDE: Vynechání klauzule WHERE smaže všechny řádky v tabulce, proto před spuštěním vždy proveďte filtrování.
  • 🎯 TargetOdstranění: WHERE `movie_id` = 18 odstraní jeden záznam, zatímco WHERE `movie_id` IN (20,21) odstraní několik záznamů v jednom příkazu.
  • 🔁 Nevratná akce: Smazaná data nelze obnovit bez zálohy, proto před spuštěním příkazu DELETE zálohujte databázi.
  • 📊 Rozsah na úrovni řádků: Příkaz DELETE odstraní pouze celé řádky; vymazání hodnoty jednoho sloupce vyžaduje příkaz UPDATE s hodnotou NULL.
  • 🇧🇷 SMAZAT vs. ZKRÁTIT vs. ZRUŠIT: Příkaz DELETE filtruje řádky, příkaz TRUNCATE okamžitě vyprázdní tabulku a příkaz DROP odstraní samotnou strukturu tabulky.

Co je to DELETE Query?

Jedno MySQL DELETE Příkaz DELETE se používá k odstranění řádků, které již nejsou potřeba z databázové tabulky. Smaže celý řádek z tabulky a vrátí počet smazaných řádků. Příkaz DELETE se hodí, když potřebujete z databáze vymazat dočasná nebo zastaralá data.

Dotaz DELETE v MySQL může z tabulky odstranit více než jeden řádek najednou. To se ukazuje jako výhodné, když z databázové tabulky odstraňujete velké množství řádků.

Jakmile je řádek smazán, nelze jej obnovit. Před smazáním dat si vždy vytvořte zálohu databáze, aby bylo možné ji v případě potřeby později obnovit a zkontrolovat.

Jak smazat řádek v MySQL

Jakmile je účel příkazu jasný, dalším krokem je syntaxe. Chcete-li smazat řádek v MySQL, používá se příkaz DELETE FROM:

DELETE FROM `table_name` [WHERE condition];

ZDE:

  • ODSTRANIT Z `název_tabulky` říká MySQL server k odstranění řádků z pojmenované tabulky.
  • [KDE podmínka] je volitelný a používá se k použití filtru, který omezuje počet řádků ovlivněných dotazem DELETE.

V případě, že klauzule WHERE se nepoužívá v MySQL ODSTRANIT dotaz a poté všechno řádky v dané tabulce budou smazány.

Warning️ Varování: Nejprve spusťte filtr jako SELECT. Pokud vrátí přesně ty řádky, které chcete odstranit, je odpovídající DELETE bezpečný. Úplná syntaxe je zdokumentována v MySQL Manuál k příkazu DELETE.

Příklad MySQL Smazat dotaz

V další části se vytvoří malá datová sada a poté se z ní něco odstraní.

Krok 1: Vložení vzorových dat

Než se pustíme do podrobnější diskuse o příkazu SQL DELETE, vložme do tabulky movies několik vzorových dat, se kterými budeme pracovat.

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);

Spuštěním výše uvedeného skriptu se do tabulky filmů přidají tři (3) filmy. Než budeme pokračovat, vyjmenujeme si všechny filmy v naší tabulce.

SELECT * FROM `movies`;

Spuštění výše uvedeného skriptu nám dává následující výsledky. Tři nově vložené řádky jsou zvýrazněny.

movie_id titul ředitel rok_vydáno category_id
1 Piráti z Karibiku 4 Rob Marshall 2011 1
2 Zapomínání na Sarah Marshal Nicholas Stoller 2008 2
3 X-Men NULL 2008 NULL
4 Code Jméno Černá Edgar Jimz 2010 NULL
5 Tatínkovy holčičky NULL 2007 8
6 andělé a démoni NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey mooneRS John Schultz 2005 8
16 67% vinen NULL 2012 NULL
18 Diktátor Charlie Chaplin 1940 7
19 ukázkový film Anonymní NULL 8
20 film 3 John Brown 1920 8

Krok 2: Smazání jednoho řádku

Předpokládejme, že videotéka Myflix si již nepřeje půjčovat film „Velký diktátor“ a chce jej odstranit z databáze. Jeho ID filmu je 18, takže níže uvedený skript tento řádek smaže.

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

Spuštění výše uvedeného skriptu v MySQL pracovní stůl Porovnání s databází Myflix smaže film s ID 18 z tabulky.

Nyní se podívejme na aktuální stav tabulky filmů.

SELECT * FROM `movies`;
movie_id titul ředitel rok_vydáno category_id
1 Piráti z Karibiku 4 Rob Marshall 2011 1
2 Zapomínání na Sarah Marshal Nicholas Stoller 2008 2
3 X-Men NULL 2008 NULL
4 Code Jméno Černá Edgar Jimz 2010 NULL
5 Tatínkovy holčičky NULL 2007 8
6 andělé a démoni NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey mooneRS John Schultz 2005 8
16 67% vinen NULL 2012 NULL
19 ukázkový film Anonymní NULL 8
20 film 3 John Brown 1920 8

POZNÁMKA:

  • Film s ID 18 se již ve výsledné sadě dotazu nevrací.
  • Příkazem DELETE nelze z tabulky smazat jeden sloupec. Příkaz odstraní celý řádek. Chcete-li vymazat jedno pole, použijte AKTUALIZACE dotazu který nastaví sloupec na hodnotu NULL.

Krok 3: Smazání více řádků s IN

Řekněme, že máme seznam filmů, které chceme smazat. Místo spouštění jednoho příkazu na řádek můžeme zkombinovat klauzuli WHERE s operátorem IN.

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

Spuštěním výše uvedeného skriptu se filmy s ID 20 a 21 z naší tabulky filmů smažou najednou.

SMAZAT vs. ZKRÁTIT vs. VLOŽIT MySQL

SMAZAT není jediný způsob, jak odstranit data z MySQLZačátečníci po něm často sahají, když by se jim hodil rychlejší příkaz, takže tabulka níže porovnává tři příkazy pro odstranění.

vlastnost DELETE Zkrátit DROP
Typ příkazu DML DDL DDL
klauzule WHERE Podporované Není podporováno Není podporováno
Co je odstraněno Vybrané řádky Všechny řádky Řádky a struktura tabulky
Rollback Možné uvnitř transakce Není možné (implicitní potvrzení) Není možné (implicitní potvrzení)
AUTO_INCREMENT Počítadlo je zachováno Čítač se vynuluje na počáteční hodnotu Pult se odstraní se stolem
Rychlost na velkých stolech Pomalu (řádek po řádku) Velmi rychlá Velmi rychlá

Použijte DELETE, když potřebujete filtr nebo možnost vrátit se zpět. Použijte ZKUŠEBNÍ STŮL Pokud chcete rychle vyprázdnit tabulku a vynulovat její čítač AUTO_INCREMENT, použijte DROP pouze tehdy, když samotná tabulka již není potřeba, protože se tím odstraní definice spolu s daty.

Nejčastější dotazy

Pouze uvnitř otevřené transakce. Spusťte START TRANSACTION, proveďte DELETE a poté ROLLBACK pro vrácení transakce zpět. Po provedení COMMIT nebo s povoleným automatickým potvrzením jsou řádky odstraněny a obnovit je lze pouze ze zálohy.

Použijte vícetabulkovou DELETE s REGISTRACE, přičemž obě tabulky pojmenujte před klíčovým slovem FROM. Případně definujte cizí klíč pomocí ON DELETE CASCADE, aby se podřízené řádky automaticky odstranily při odstranění nadřazeného řádku.

Bezpečný režim aktualizace je ve výchozím nastavení povolen v MySQL WorkbenchOdmítá jakékoli příkazy DELETE, jejichž klauzule WHERE nepoužívá klíčový sloupec, čímž zabraňuje nechtěnému smazání celé tabulky. Zakažte ji v nabídce Upravit > Předvolby > Editor SQL.

Ano. Asistenti umělé inteligence překládají požadavek v jednoduché angličtině do syntaxe DELETE a dokáží vysvětlit klauzuli WHERE. Vygenerovaný filtr vždy nejprve porovnejte s klauzulí SELECT, protože model umělé inteligence nevidí vaše živá data.

Ne. Nechte AI napsat návrh příkazu, ale nejprve ho spusťte sami na záložní nebo pracovní kopii. Chybějící klauzule WHERE smaže všechny řádky a žádný nástroj AI to nemůže vrátit zpět, jakmile je transakce potvrzena.

Shrňte tento příspěvek takto: