sql >> Databasteknik >  >> RDS >> SQLite

SQLite - Ta bort data

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 139 

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


  1. 8 WP-CLI-kommandon för att rensa upp och optimera din webbplats

  2. SQL-fråga - Sammanfoga resultat till en sträng

  3. Implementering av failover i MS SQL Server 2017 Standard

  4. Byta ut tabellpartitioner i SQL Server:En genomgång