SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite - Elimina dati

Il DELETE istruzione può essere utilizzata per eliminare i dati in una tabella.

Il WHERE può essere utilizzata per specificare esattamente quali righe devono essere eliminate.

Puoi eliminare tutte le righe, alcune righe o nessuna, a seconda delle condizioni di filtro applicate da WHERE clausola.

Una semplice eliminazione

Per prima cosa, troviamo un artista da eliminare:

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, eliminiamo il numero artista 12 (Uccisore).

Ecco la semplice istruzione delete che elimina quel record dagli Artisti tabella:

DELETE FROM Artists
WHERE ArtistId = 12;

Quindi, dopo averlo eseguito, possiamo verificare che il record sia stato effettivamente eliminato con un SELECT dichiarazione:

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

(Nessun risultato).

Eliminazione di dati con un vincolo di chiave esterna

Se tenti di eliminare un record a cui fa riferimento una chiave esterna, dovresti ricevere un errore. Dovrai prima eliminare i record di chiave esterna, prima di eliminare il record di chiave primaria.

Ad esempio, ID artista 17 (dagli Artisti table) fa riferimento a due record negli Album tabella (vedi ArtistId colonna):

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

Quindi, se proviamo a eliminare l'artista 17 dalla tabella Artists (che contiene la chiave primaria), dovremmo ricevere un errore.

Ecco la dichiarazione di eliminazione:

DELETE FROM Artists
WHERE ArtistId = 17;

Ed ecco il risultato:

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

Quindi, dobbiamo eliminare i record di chiave esterna prima di eliminare la chiave primaria.

Se non hai ottenuto un vincolo FOREIGN KEY non riuscito messaggio, potrebbe essere necessario abilitare il controllo dei vincoli della chiave esterna. Esegui PRAGMA foreign_keys = ON; per abilitare i controlli dei vincoli di chiave esterna.

Elimina i record associati

Quindi eliminiamo i record associati negli Album tabella, prima di provare di nuovo l'istruzione di eliminazione precedente.

DELETE FROM Albums
WHERE ArtistId = 17;

Verifica che siano stati eliminati:

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

(Nessun risultato).

Ora proviamo di nuovo l'istruzione di eliminazione originale:

DELETE FROM Artists
WHERE ArtistId = 17;

Sembra promettente — nessun errore:

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

E un SELECT l'istruzione conferma l'eliminazione:

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

Nessun risultato.

Elimina tutte le righe

Puoi eliminare tutte le righe in una tabella omettendo WHERE clausola.

Abbiamo un tavolo libero ( Albums1 ), quindi proviamolo su quello.

Per prima cosa, controlliamo che contenga effettivamente dei dati:

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          

Lo fa. Quindi andiamo avanti e cancelliamo tutto:

DELETE FROM Albums1;

Ora controlliamo di nuovo il suo contenuto:

sqlite> SELECT * FROM Albums1;
sqlite> 

(Nessun risultato).