sql >> Database teknologi >  >> RDS >> SQLite

SQLite - Slet data

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 139 

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


  1. Hvordan gemmes datoer i Oracle?

  2. HAProxy-forbindelser vs MySQL-forbindelser - hvad du bør vide

  3. Varighed af data i en global midlertidig tabel?

  4. Dårlig standby