Das DELETE
-Anweisung kann verwendet werden, um Daten in einer Tabelle zu löschen.
Das WHERE
-Klausel verwendet werden, um genau anzugeben, welche Zeilen gelöscht werden sollen.
Sie können alle Zeilen, einige Zeilen oder keine löschen, abhängig von den Filterbedingungen, die von WHERE
angewendet werden Klausel.
Ein einfaches Löschen
Suchen wir zuerst einen zu löschenden Künstler:
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, löschen wir die Künstlernummer 12 (Jägerin).
Hier ist die einfache delete-Anweisung, die diesen Datensatz aus den Artists löscht Tabelle:
DELETE FROM Artists WHERE ArtistId = 12;
Nachdem wir das ausgeführt haben, können wir also mit einem SELECT
überprüfen, ob der Datensatz tatsächlich gelöscht wurde Aussage:
sqlite> SELECT * FROM Artists WHERE ArtistId = 12; sqlite>
(Keine Ergebnisse).
Löschen von Daten mit einer Fremdschlüsseleinschränkung
Wenn Sie versuchen, einen Datensatz zu löschen, der von einem Fremdschlüssel referenziert wird, sollten Sie eine Fehlermeldung erhalten. Sie müssen zuerst die Fremdschlüsseldatensätze löschen, bevor Sie die Primärschlüsseldatensätze löschen.
Beispiel:Künstler-ID 17 (von den Künstlern Tabelle) zufällig von zwei Datensätzen in den Alben referenziert wird Tabelle (siehe die ArtistId Spalte):
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; AlbumId AlbumName ReleaseDate ArtistId -------- -------------------- ------------ ------------ 5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
Wenn wir also versuchen, den Künstler 17 zu löschen aus der Artists-Tabelle (die den Primärschlüssel enthält), sollten wir eine Fehlermeldung erhalten.
Hier ist die Löschanweisung:
DELETE FROM Artists WHERE ArtistId = 17;
Und hier ist das Ergebnis:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; Error: FOREIGN KEY constraint failed sqlite>
Daher müssen wir die Fremdschlüsseldatensätze löschen, bevor wir den Primärschlüssel löschen.
Wenn Sie keine
Fremdschlüssel-Einschränkung fehlgeschlagen
erhalten haben Meldung, müssen Sie möglicherweise die Fremdschlüssel-Einschränkungsprüfung aktivieren. Führen Sie PRAGMA foreign_keys = ON;
aus Fremdschlüssel-Einschränkungsprüfungen aktivieren.
Verknüpfte Datensätze löschen
Löschen wir also die zugehörigen Datensätze in den Alben Tabelle, bevor Sie die obige Löschanweisung erneut versuchen.
DELETE FROM Albums WHERE ArtistId = 17;
Überprüfen Sie, ob sie gelöscht wurden:
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; sqlite>
(Keine Ergebnisse).
Versuchen wir es jetzt noch einmal mit der ursprünglichen Löschanweisung:
DELETE FROM Artists WHERE ArtistId = 17;
Sieht vielversprechend aus – kein Fehler:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; sqlite>
Und ein SELECT
Anweisung bestätigt die Löschung:
sqlite> SELECT * FROM Artists WHERE ArtistId = 17; sqlite>
Keine Ergebnisse.
Alle Zeilen löschen
Sie können alle Zeilen in einer Tabelle löschen, indem Sie WHERE
weglassen Klausel.
Wir haben eine freie Tabelle ( Albums1 ), also versuchen wir es mit diesem hier.
Lassen Sie uns zuerst überprüfen, ob es tatsächlich Daten enthält:
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
Es tut. Also lass uns weitermachen und alles löschen:
DELETE FROM Albums1;
Lassen Sie uns nun den Inhalt erneut überprüfen:
sqlite> SELECT * FROM Albums1; sqlite>
(Keine Ergebnisse).