MySQL DELETE Query: Jak usunąć wiersz z tabeli
⚡ Inteligentne podsumowanie
MySQL Zapytanie DELETE usuwa z tabeli wiersze, które nie są już potrzebne, i zwraca liczbę wierszy, których to dotyczy. Ten materiał wyjaśnia składnię polecenia DELETE, filtrowanie WHERE, usuwanie wielu wierszy za pomocą polecenia IN oraz bezpieczniejsze alternatywy: TRUNCATE i DROP.

Co to jest zapytanie DELETE?
MySQL DELETE Instrukcja DELETE służy do usuwania wierszy, które nie są już potrzebne w tabeli bazy danych. Usuwa ona cały wiersz z tabeli i zwraca liczbę usuniętych wierszy. Instrukcja DELETE przydaje się, gdy trzeba usunąć tymczasowe lub nieaktualne dane z bazy danych.
Zapytanie DELETE w MySQL Można usunąć więcej niż jeden wiersz z tabeli za jednym razem. Jest to przydatne podczas usuwania dużej liczby wierszy z tabeli bazy danych.
Po usunięciu wiersza nie można go odzyskać. Zawsze przed usunięciem danych należy wykonać kopię zapasową bazy danych, aby w razie potrzeby móc ją później przywrócić i przejrzeć.
Jak usunąć wiersz w MySQL
Mając jasny cel polecenia, następnym krokiem jest składnia. Aby usunąć wiersz w MySQL, używana jest instrukcja DELETE FROM:
DELETE FROM `table_name` [WHERE condition];
TUTAJ:
- USUŃ Z `table_name` mówi MySQL serwer usuwa wiersze z podanej tabeli.
- [warunek GDZIE] jest opcjonalny i służy do zastosowania filtra ograniczającego liczbę wierszy objętych zapytaniem DELETE.
Jeśli klauzula GDZIE nie jest używany w MySQL Następnie zapytanie DELETE cała kolekcja wiersze w danej tabeli zostaną usunięte.
⚠️ Ostrzeżenie: Najpierw uruchom filtr jako SELECT. Jeśli zwróci on dokładnie te wiersze, które chcesz usunąć, pasujące polecenie DELETE jest bezpieczne. Pełna składnia jest udokumentowana w MySQL Instrukcja obsługi polecenia DELETE.
Przykład MySQL Usuń zapytanie
Następna sekcja tworzy mały zestaw danych, a następnie usuwa z niego dane.
Krok 1: Wprowadź przykładowe dane
Zanim przejdziemy do bardziej szczegółowego omówienia polecenia SQL DELETE, wstawmy do tabeli movies kilka przykładowych danych, z którymi będziemy mogli popracować.
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);
Wykonanie powyższego skryptu dodaje trzy (3) filmy do tabeli „Filmy”. Zanim przejdziemy dalej, wypiszmy wszystkie filmy w naszej tabeli.
SELECT * FROM `movies`;
Wykonanie powyższego skryptu daje nam następujące rezultaty. Trzy nowo wstawione wiersze są podświetlone.
| identyfikator_filmu | tytuł | dyrektor | rok_wydania | identyfikator_kategorii |
|---|---|---|---|---|
| 1 | Piraci z Karaibów 4 | Rob Marshall | 2011 | 1 |
| 2 | Zapominając o Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 3 | X-Men | NULL | 2008 | NULL |
| 4 | Code Imię Czarny | Edgara Jimza | 2010 | NULL |
| 5 | Małe dziewczynki tatusia | NULL | 2007 | 8 |
| 6 | Anioły i demony | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | Jana Schultza | 2005 | 8 |
| 16 | 67% winnych | NULL | 2012 | NULL |
| 18 | Dyktator | Charlie Chaplin | 1940 | 7 |
| 19 | przykładowy film | Anonimowy | NULL | 8 |
| 20 | film 3 | John Brown | 1920 | 8 |
Krok 2: Usuń pojedynczy wiersz
Załóżmy, że biblioteka filmów Myflix nie chce już wypożyczać filmu „Wielki Dyktator” i chce go usunąć z bazy danych. Identyfikator filmu to 18, więc poniższy skrypt usuwa ten wiersz.
DELETE FROM `movies` WHERE `movie_id` = 18;
Wykonanie powyższego skryptu w MySQL Stoł warsztatowy w bazie danych Myflix usuwa film o identyfikatorze 18 z tabeli.
Sprawdźmy teraz aktualny stan tabeli filmów.
SELECT * FROM `movies`;
| identyfikator_filmu | tytuł | dyrektor | rok_wydania | identyfikator_kategorii |
|---|---|---|---|---|
| 1 | Piraci z Karaibów 4 | Rob Marshall | 2011 | 1 |
| 2 | Zapominając o Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 3 | X-Men | NULL | 2008 | NULL |
| 4 | Code Imię Czarny | Edgara Jimza | 2010 | NULL |
| 5 | Małe dziewczynki tatusia | NULL | 2007 | 8 |
| 6 | Anioły i demony | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | Jana Schultza | 2005 | 8 |
| 16 | 67% winnych | NULL | 2012 | NULL |
| 19 | przykładowy film | Anonimowy | NULL | 8 |
| 20 | film 3 | John Brown | 1920 | 8 |
UWAGA:
- Film o identyfikatorze 18 nie jest już zwracany w zestawie wyników zapytania.
- Nie można usunąć pojedynczej kolumny z tabeli za pomocą polecenia DELETE. Polecenie usuwa cały wiersz. Aby wyczyścić jedno pole, użyj Zapytanie UPDATE która ustawia kolumnę na NULL.
Krok 3: Usuń wiele wierszy za pomocą IN
Załóżmy, że mamy listę filmów, które chcemy usunąć. Zamiast uruchamiać po jednym poleceniu dla każdego wiersza, możemy połączyć klauzulę WHERE z operatorem IN.
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
Wykonanie powyższego skryptu spowoduje usunięcie filmów o identyfikatorach 20 i 21 z naszej tabeli filmów za jednym razem.
USUŃ vs OBCNIJ vs DROP w MySQL
DELETE nie jest jedynym sposobem usuwania danych z MySQLPoczątkujący często sięgają po nią, gdy lepsze byłoby szybsze polecenie, dlatego w poniższej tabeli porównano trzy polecenia usuwania.
| Cecha | DELETE | ŚCIĘTY | DROP |
|---|---|---|---|
| Typ polecenia | DML | DDL | DDL |
| klauzula GDZIE | Utrzymany | Nie jest obsługiwany | Nie jest obsługiwany |
| Co jest usuwane | Wybrane wiersze | Wszystkie rzędy | Wiersze i struktura tabeli |
| Wycofywanie | Możliwe w ramach transakcji | Niemożliwe (zatwierdzenie niejawne) | Niemożliwe (zatwierdzenie niejawne) |
| AUTO_INCREMENT | Licznik jest zachowany | Licznik resetuje się do wartości początkowej | Licznik jest usuwany wraz ze stołem |
| Prędkość na dużych stołach | Powoli (rząd po rzędzie) | Bardzo szybka | Bardzo szybka |
Użyj DELETE, gdy potrzebujesz filtra lub możliwości wycofania zmian. OBCIĄĆ TABELĘ Gdy chcesz szybko opróżnić tabelę i zresetować jej licznik AUTO_INCREMENT. Użyj DROP tylko wtedy, gdy sama tabela nie jest już potrzebna, ponieważ usuwa ona definicję wraz z danymi.
