DELETE
sætning kan bruges til at slette data i en tabel.
WHERE
klausul kan bruges til at specificere præcis hvilke rækker der skal slettes.
Du kan slette alle rækker, nogle rækker eller ingen, afhængigt af de filtreringsbetingelser, der anvendes af WHERE
klausul.
En simpel sletning
Lad os først finde en kunstner at slette:
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 australsk jazzband centreret omkring poly9 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, lad os slette kunstnernummer 12 (Dræber).
Her er den simple delete-sætning, der sletter denne post fra Kunstnerne tabel:
SLET FRA kunstnere WHERE ArtistId =12;
Så efter at have kørt det, kan vi bekræfte, at posten faktisk blev slettet med en SELECT
erklæring:
sqlite> VÆLG * FRA kunstnere WHERE ArtistId =12;sqlite>
(Ingen resultater).
Sletning af data med en fremmednøglebegrænsning
Hvis du forsøger at slette en post, der refereres til af en fremmednøgle, skulle du få en fejl. Du skal først slette de fremmede nøgleposter, før du sletter den primære nøglepost.
For eksempel kunstner-id 17 (fra Kunstnere tabel) er tilfældigvis refereret af to poster i Album tabel (se ArtistId kolonne):
sqlite> VÆLG * FRA albums WHERE ArtistId =17;AlbumId AlbumName Udgivelsesdato ArtistId -------- -------------------- ---- -------- ------------5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
Så hvis vi forsøger at slette kunstner 17 fra kunstnertabellen (som indeholder den primære nøgle), skulle vi få en fejl.
Her er sletningserklæringen:
SLET FRA kunstnere WHERE ArtistId =17;
Og her er resultatet:
sqlite> DELETE FROM Artists ...> WHERE ArtistId =17;Fejl:FOREIGN KEY constraint failedsqlite>
Så vi er nødt til at slette de fremmede nøgleposter, før vi sletter den primære nøgle.
Hvis du ikke fik en
FOREIGN KEY-begrænsning mislykkedes
besked, skal du muligvis aktivere kontrol af fremmednøglebegrænsninger. Kør PRAGMA foreign_keys = ON;
for at aktivere kontrol af fremmednøglebegrænsninger.
Slet Associated Records
Så lad os slette de tilknyttede poster i Album tabel, før du prøver ovenstående slettesætning igen.
SLET FRA album WHERE ArtistId =17;
Tjek, at de blev slettet:
sqlite> VÆLG * FRA album, WHERE ArtistId =17;sqlite>
(Ingen resultater).
Lad os nu prøve den originale delete-sætning igen:
SLET FRA kunstnere WHERE ArtistId =17;
Ser lovende ud – ingen fejl:
sqlite> SLET FRA kunstnere ...> WHERE ArtistId =17;sqlite>
Og en SELECT
erklæring bekræfter sletningen:
sqlite> VÆLG * FRA kunstnere WHERE ArtistId =17;sqlite>
Ingen resultater.
Slet alle rækker
Du kan slette alle rækker i en tabel ved at udelade WHERE
klausul.
Vi har et ekstra bord ( Albums1 ), så lad os prøve det på den.
Først, lad os lige tjekke, at den faktisk indeholder data:
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 139 Big Red Car 7 139Det gør det. Så lad os gå videre og slette det hele:
SLET FRA Albums1;Lad os nu tjekke indholdet igen:
sqlite> VÆLG * FRA Albums1;sqlite>(Ingen resultater).