DELETE
oświadczenie może być użyte do usunięcia danych z tabeli.
WHERE
Klauzula może być użyta w celu dokładnego określenia, które wiersze powinny zostać usunięte.
Możesz usunąć wszystkie wiersze, niektóre wiersze lub żaden, w zależności od warunków filtrowania zastosowanych przez WHERE
klauzula.
Proste usuwanie
Najpierw znajdźmy wykonawcę do usunięcia:
sqlite> SELECT * FROM Artists; ArtistId ArtistName Bio -------- -------------------- ---------------------------------------- 1 Joe Satriani 2 Steve Vai 3 The Tea Party 4 Noiseworks 5 Wayne Jury 6 Mr Percival 7 Iron Maiden 8 Atmasphere Australian jazz band centred around poly 9 Ian Moss 10 Magnum 11 Strapping Young Lad 12 Slayer 13 Primus 14 Pat Metheny 15 Frank Gambale 16 Mothers of Invention 17 The Wiggles
OK, usuńmy wykonawcę numer 12 (Pogromca).
Oto prosta instrukcja usuwania, która usuwa ten rekord z Wykonawców tabela:
DELETE FROM Artists WHERE ArtistId = 12;
Tak więc po uruchomieniu tego możemy sprawdzić, czy rekord został faktycznie usunięty za pomocą SELECT
oświadczenie:
sqlite> SELECT * FROM Artists WHERE ArtistId = 12; sqlite>
(Brak wyników).
Usuwanie danych z ograniczeniem klucza obcego
Jeśli spróbujesz usunąć rekord, do którego odwołuje się klucz obcy, powinien pojawić się błąd. Musisz najpierw usunąć rekordy klucza obcego, zanim usuniesz rekord klucza podstawowego.
Na przykład identyfikator wykonawcy 17 (od Artystów tabeli) odwołuje się do dwóch rekordów w Albumach tabela (zobacz ArtistId kolumna):
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; AlbumId AlbumName ReleaseDate ArtistId -------- -------------------- ------------ ------------ 5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
Więc jeśli spróbujemy usunąć wykonawcę 17 z tabeli Artyści (która zawiera klucz podstawowy), powinniśmy otrzymać błąd.
Oto instrukcja usunięcia:
DELETE FROM Artists WHERE ArtistId = 17;
A oto wynik:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; Error: FOREIGN KEY constraint failed sqlite>
Dlatego musimy usunąć rekordy klucza obcego, zanim usuniemy klucz podstawowy.
Jeśli nie udało Ci się uzyskać
ograniczenia na klucz OBCY
komunikat, może być konieczne włączenie sprawdzania ograniczenia klucza obcego. Uruchom PRAGMA foreign_keys = ON;
aby włączyć sprawdzanie ograniczeń klucza obcego.
Usuń powiązane rekordy
Usuńmy więc powiązane rekordy w Albumach tabeli, przed ponownym wypróbowaniem powyższej instrukcji usuwania.
DELETE FROM Albums WHERE ArtistId = 17;
Sprawdź, czy zostały usunięte:
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; sqlite>
(Brak wyników).
Spróbujmy teraz ponownie z oryginalną instrukcją usuwania:
DELETE FROM Artists WHERE ArtistId = 17;
Wygląda obiecująco — bez błędu:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; sqlite>
I SELECT
oświadczenie potwierdza usunięcie:
sqlite> SELECT * FROM Artists WHERE ArtistId = 17; sqlite>
Brak wyników.
Usuń wszystkie wiersze
Możesz usunąć wszystkie wiersze w tabeli, pomijając WHERE
klauzula.
Mamy zapasowy stół ( Albumy1 ), więc spróbujmy na tym.
Najpierw sprawdźmy, czy rzeczywiście zawiera dane:
sqlite> SELECT * FROM Albums1; AlbumId AlbumName Year ArtistId -------- -------------------- ------------ ------------ 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Ali 1987 1 4 Heavy as a Really He 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of 1991 13 10 Flying in a Blue Dre 1989 1 11 Black Swans and Worm 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
To robi. Więc śmiało usuńmy to wszystko:
DELETE FROM Albums1;
Sprawdźmy teraz ponownie jego zawartość:
sqlite> SELECT * FROM Albums1; sqlite>
(Brak wyników).