SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite - Daten löschen

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