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