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.

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.
