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