DELETE
uttalande kan användas för att radera data i en tabell.
WHERE
sats kan användas för att specificera exakt vilka rader som ska tas bort.
Du kan ta bort alla rader, vissa rader eller ingen, beroende på de filtreringsvillkor som tillämpas av WHERE
klausul.
En enkel radering
Låt oss först hitta en artist att ta bort:
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 australiskt jazzband centrerat kring 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
Okej, låt oss ta bort artistnummer 12 (Slayer).
Här är den enkla delete-satsen som tar bort den posten från Artister tabell:
RADERA FRÅN artister WHERE ArtistId =12;
Så efter att ha kört det kan vi verifiera att posten faktiskt raderades med en SELECT
uttalande:
sqlite> VÄLJ * FRÅN artister WHERE ArtistId =12;sqlite>
(Inga resultat).
Ta bort data med en främmande nyckelbegränsning
Om du försöker ta bort en post som refereras av en främmande nyckel, bör du få ett felmeddelande. Du måste först radera posterna med främmande nyckel innan du tar bort den primära nyckelposten.
Till exempel artist-ID 17 (från Artister table) råkar refereras av två poster i Album tabellen (se ArtistId kolumn):
sqlite> VÄLJ * FRÅN Album WHERE ArtistId =17;AlbumId AlbumName Releasedatum ArtistId -------- -------------------- ---- -------- ------------5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
Så om vi försöker ta bort artist 17 från artisttabellen (som innehåller primärnyckeln) bör vi få ett felmeddelande.
Här är raderingssatsen:
RADERA FRÅN artister WHERE ArtistId =17;
Och här är resultatet:
sqlite> DELETE FROM Artists ...> WHERE ArtistId =17;Fel:FOREIGN KEY constraint failedsqlite>
Så vi måste radera posterna med främmande nyckel innan vi tar bort primärnyckeln.
Om du inte fick en
FOREIGN KEY-begränsning misslyckades
meddelande kan du behöva aktivera kontroll av främmande nyckel. Kör PRAGMA foreign_keys = ON;
för att aktivera kontroller av främmande nyckel.
Ta bort associerade poster
Så låt oss ta bort associerade poster i Album tabell, innan du försöker ta bort-satsen ovan igen.
RADERA FRÅN Album WHERE ArtistId =17;
Kontrollera att de har tagits bort:
sqlite> VÄLJ * FRÅN Album WHERE ArtistId =17;sqlite>
(Inga resultat).
Låt oss nu försöka med den ursprungliga delete-satsen igen:
RADERA FRÅN artister WHERE ArtistId =17;
Ser lovande ut — inga fel:
sqlite> DELETE FROM Artists ...> WHERE ArtistId =17;sqlite>
Och en SELECT
uttalande bekräftar raderingen:
sqlite> VÄLJ * FRÅN artister WHERE ArtistId =17;sqlite>
Inga resultat.
Ta bort alla rader
Du kan ta bort alla rader i en tabell genom att utelämna WHERE
klausul.
Vi har ett extra bord ( Album1 ), så låt oss prova på den.
Först, låt oss bara kontrollera att den faktiskt innehåller 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å låt oss gå vidare och ta bort allt:
RADERA FRÅN Album1;Låt oss nu kontrollera innehållet igen:
sqlite> VÄLJ * FRÅN Album1;sqlite>(Inga resultat).