sql >> Database >  >> RDS >> SQLite

SQLite - Gegevens verwijderen

De DELETE statement kan worden gebruikt om gegevens in een tabel te verwijderen.

De WHERE clausule kan worden gebruikt om precies aan te geven welke rijen moeten worden verwijderd.

U kunt alle rijen, enkele of geen rijen verwijderen, afhankelijk van de filtervoorwaarden die worden toegepast door de WHERE clausule.

Een eenvoudige verwijdering

Laten we eerst een artiest zoeken om te verwijderen:

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, laten we artiestnummer 12 verwijderen (Doder).

Hier is de eenvoudige delete-instructie die dat record verwijdert uit de Artiesten tabel:

DELETE FROM Artists
WHERE ArtistId = 12;

Dus nadat we dat hebben uitgevoerd, kunnen we verifiëren dat het record inderdaad is verwijderd met een SELECT verklaring:

sqlite> SELECT * FROM Artists WHERE ArtistId = 12;
sqlite>                                                                     

(Geen resultaten).

Gegevens verwijderen met een externe sleutelbeperking

Als u probeert een record te verwijderen waarnaar wordt verwezen door een externe sleutel, zou u een foutmelding moeten krijgen. U moet eerst de externe sleutelrecords verwijderen, voordat u de primaire sleutelrecord verwijdert.

Bijvoorbeeld artiest-ID 17 (van de Artiesten tabel) waarnaar toevallig wordt verwezen door twee records in de Albums tabel (zie de ArtistId kolom):

sqlite> SELECT * FROM Albums WHERE ArtistId = 17;
AlbumId   AlbumName             ReleaseDate   ArtistId    
--------  --------------------  ------------  ------------
5         Yummy Yummy           1994          17          
13        Big Red Car           1995          17          

Dus als we artiest 17 proberen te verwijderen van de Artists-tabel (die de primaire sleutel bevat), zouden we een foutmelding moeten krijgen.

Hier is de delete-instructie:

DELETE FROM Artists
WHERE ArtistId = 17;

En hier is het resultaat:

sqlite> DELETE FROM Artists
   ...> WHERE ArtistId = 17;
Error: FOREIGN KEY constraint failed
sqlite> 

We moeten dus de externe sleutelrecords verwijderen voordat we de primaire sleutel verwijderen.

Als u geen FOREIGN KEY-beperking heeft gekregen, is mislukt bericht, moet u mogelijk de beperking van externe sleutels inschakelen. Voer PRAGMA foreign_keys = ON; om beperkingscontroles voor externe sleutels in te schakelen.

Geassocieerde records verwijderen

Laten we dus de bijbehorende records in de Albums . verwijderen tabel, voordat u de bovenstaande verwijderopdracht opnieuw probeert.

DELETE FROM Albums
WHERE ArtistId = 17;

Controleer of ze zijn verwijderd:

sqlite> SELECT * FROM Albums WHERE ArtistId = 17;
sqlite> 

(Geen resultaten).

Laten we nu de oorspronkelijke verwijderopdracht opnieuw proberen:

DELETE FROM Artists
WHERE ArtistId = 17;

Ziet er veelbelovend uit — geen fout:

sqlite> DELETE FROM Artists
   ...> WHERE ArtistId = 17;
sqlite> 	

En een SELECT verklaring bevestigt de verwijdering:

sqlite> SELECT * FROM Artists WHERE ArtistId = 17;
sqlite> 

Geen resultaten.

Alle rijen verwijderen

U kunt alle rijen in een tabel verwijderen door de WHERE . weg te laten clausule.

We hebben een vrije tafel ( Albums1 ), dus laten we het daar eens op proberen.

Laten we eerst eens kijken of het daadwerkelijk gegevens bevat:

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          

Het doet. Dus laten we doorgaan en alles verwijderen:

DELETE FROM Albums1;

Laten we nu de inhoud opnieuw controleren:

sqlite> SELECT * FROM Albums1;
sqlite> 

(Geen resultaten).


  1. Invoegen in vanuit CTE

  2. PostgreSQL rij naar kolommen

  3. stel sqlite db correct in op Android

  4. Ubuntu 18.04 voor SQL Server 2019 op virtuele machine installeren met VMware Workstation