sql >> Databáze >  >> RDS >> SQLite

SQLite - Smazat data

DELETE příkaz lze použít k odstranění dat v tabulce.

WHERE klauzule lze použít k přesnému určení řádků, které mají být odstraněny.

Můžete smazat všechny řádky, některé řádky nebo žádný, v závislosti na podmínkách filtrování použitých v WHERE doložka.

Jednoduché smazání

Nejprve najdeme interpreta, kterého chcete smazat:

sqlite> SELECT * FROM Artists;ArtistId ArtistName Bio -------- -------------------- --------- -------------------------------1 Joe Satriani 2 Steve Vai 3 Tea Party 4 Noiseworks 5 Wayne Porota 6 Pan Percival 7 Iron Maiden 8 Atmasphere Australská jazzová kapela soustředěná kolem poly9 Ian Moss 10 Magnum 11 Strapping Young Lad 12 Slayer 13 Primus 14 Pat Metheny 15 Frank Gambale 16 Matek vynálezu 17 The Wiggles 

OK, smažeme číslo interpreta 12 (Slayer).

Zde je jednoduchý příkaz delete, který odstraní daný záznam z Umělci tabulka:

ODSTRANIT Z Umělců WHERE ArtistId =12;

Takže po spuštění můžeme ověřit, že záznam byl ve skutečnosti smazán pomocí SELECT prohlášení:

sqlite> SELECT * FROM Artists WHERE ArtistId =12;sqlite> 

(Žádné výsledky).

Smazání dat s omezením cizího klíče

Pokud se pokusíte odstranit záznam, na který odkazuje cizí klíč, měla by se zobrazit chyba. Před smazáním záznamu primárního klíče budete muset nejprve odstranit záznamy cizího klíče.

Například ID interpreta 17 (z Umělci tabulka) je náhodou odkazována dvěma záznamy v Albech tabulka (viz ArtistId sloupec):

sqlite> VYBRAT * Z alb WHERE ArtistId =17;AlbumId AlbumName Datum vydání ArtistId -------- -------------------- ---- -------- ------------5 Yummy Yummy 1994 17 13 Big Red Car 1995 17 

Pokud se tedy pokusíme smazat interpreta 17 z tabulky Artists (která obsahuje primární klíč), měli bychom dostat chybu.

Zde je příkaz k odstranění:

ODSTRANIT Z Umělců WHERE ArtistId =17;

A tady je výsledek:

sqlite> DELETE FROM Artists ...> WHERE ArtistId =17;Chyba:CIZÍ KLÍČ omezení selhalosqlite> 

Před odstraněním primárního klíče tedy musíme odstranit záznamy cizích klíčů.

Pokud jste neobdrželi omezení CIZÍ KLÍČ selhalo možná budete muset povolit kontrolu omezení cizího klíče. Spusťte PRAGMA foreign_keys = ON; pro povolení kontroly omezení cizího klíče.

Smazat přidružené záznamy

Pojďme tedy odstranit související záznamy v Albech tabulky, než znovu zkusíte výše uvedený příkaz delete.

ODSTRANIT Z alb WHERE ArtistId =17;

Zkontrolujte, zda byly smazány:

sqlite> VYBERTE * Z alb WHERE ArtistId =17;sqlite> 

(Žádné výsledky).

Nyní zkusme znovu původní příkaz delete:

ODSTRANIT Z Umělců WHERE ArtistId =17;

Vypadá to slibně – žádná chyba:

sqlite> ODSTRANIT Z Umělců ...> KDE ArtistId =17;sqlite> 

A SELECT výpis potvrzuje smazání:

sqlite> VYBERTE * FROM Artists WHERE ArtistId =17;sqlite> 

Žádné výsledky.

Smazat všechny řádky

Všechny řádky v tabulce můžete smazat vynecháním WHERE doložka.

Máme náhradní tabulku ( Albums1 ), tak to zkusíme na tomhle.

Nejprve zkontrolujeme, že skutečně obsahuje data:

sqlite> SELECT * FROM Albums1;AlbumId AlbumName Year ArtistId -------- -------------------- --------- ---- ------------1 Killers 1981 7 2 Powerslave 1984 7 3 Surfování s Ali 1987 1 4 Heavy as a Really He 1995 11 5 Yummy Yummy 1994 17 6 ​​Out of the Loop 2000 6 7 Sát to 1989 13 8 Vepřová soda 1993 13 9 Plavba po mořích 1991 13 10 Létání v modrém Dre 1989 1 11 Černé labutě a červ 2010 1 12 Někde v čase 1986 7 195 Bigpre> 7 195 

ano. Takže pojďme do toho a smažte to všechno:

DELETE FROM Albums1;

Nyní znovu zkontrolujeme jeho obsah:

sqlite> SELECT * FROM Albums1;sqlite> 

(Žádné výsledky).


  1. Rozdíl mezi časovými razítky v milisekundách v Oracle

  2. DateDiff pro výstup v hodinách a minutách

  3. Ukázková databáze MySQL

  4. Jednoduchý dotaz Oracle:doslovný neodpovídá formátovacímu řetězci