DELETE
операторът може да се използва за изтриване на данни в таблица.
WHERE
клаузата може да се използва, за да се посочи точно кои редове да бъдат изтрити.
Можете да изтриете всички редове, някои редове или нито един, в зависимост от условията за филтриране, приложени от WHERE
клауза.
Просто изтриване
Първо, нека намерим изпълнител, който да изтрием:
sqlite> SELECT * FROM Artists;ArtistId ArtistName Bio -------- -------------------- --------- -------------------------------1 Джо Сатриани 2 Стив Вай 3 Чаеното парти 4 Noiseworks 5 Уейн Жури 6 Мистър Пърсивал 7 Iron Maiden 8 Atmasphere Австралийски джаз бенд съсредоточен около 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
Добре, нека изтрием номер на изпълнител 12 (Убиец).
Ето простият израз за изтриване, който изтрива този запис от Изпълнители таблица:
ИЗТРИВАНЕ ОТ Изпълнители WHERE ArtistId =12;
Така че, след като изпълним това, можем да проверим дали записът всъщност е изтрит с SELECT
изявление:
sqlite> SELECT * FROM Artists WHERE ArtistId =12;sqlite>
(Няма резултати).
Изтриване на данни с ограничение за външен ключ
Ако се опитате да изтриете запис, който е препратен от външен ключ, трябва да получите грешка. Първо ще трябва да изтриете записите на външния ключ, преди да изтриете записа на първичния ключ.
Например идентификатор на изпълнител 17 (от Изпълнители table) се позовава на два записа в Албуми таблица (вижте ArtistId колона):
sqlite> SELECT * FROM Albums WHERE ArtistId =17;AlbumId AlbumName ReleaseDate ArtistId -------- -------------------- ---- -------- ------------5 Yummy Yummy 1994 17 13 Голямата червена кола 1995 17
Така че, ако се опитаме да изтрием изпълнител 17 от таблицата „Изпълнители“ (която съдържа първичния ключ), трябва да получим грешка.
Ето изявлението за изтриване:
ИЗТРИВАНЕ ОТ Изпълнители WHERE ArtistId =17;
И ето резултата:
sqlite> DELETE FROM Artists ...> WHERE ArtistId =17;Грешка:Ограничение FOREIGN KEY failedsqlite>
Така че трябва да изтрием записите на външния ключ, преди да изтрием първичния ключ.
Ако не сте получили
Ограничението FOREIGN KEY е неуспешно
съобщение, може да се наложи да активирате проверка на ограниченията за външни ключове. Изпълнете PRAGMA foreign_keys = ON;
за да активирате проверките за ограничения на външния ключ.
Изтриване на свързани записи
Така че нека изтрием свързаните записи в Албуми таблица, преди да опитате отново горния израз за изтриване.
ИЗТРИВАНЕ ОТ Албуми WHERE ArtistId =17;
Проверете дали са изтрити:
sqlite> ИЗБЕРЕТЕ * ОТ Албуми WHERE ArtistId =17;sqlite>
(Няма резултати).
Сега нека опитаме отново оригиналния израз за изтриване:
ИЗТРИВАНЕ ОТ Изпълнители WHERE ArtistId =17;
Изглежда обещаващо — няма грешка:
sqlite> DELETE FROM Artists ...> WHERE ArtistId =17;sqlite>
И SELECT
изявление потвърждава изтриването:
sqlite> SELECT * FROM Artists WHERE ArtistId =17;sqlite>
Няма резултати.
Изтриване на всички редове
Можете да изтриете всички редове в таблица, като пропуснете WHERE
клауза.
Имаме резервна маса ( Албуми1 ), така че нека го изпробваме на този.
Първо, нека просто проверим дали действително съдържа данни:
sqlite> SELECT * FROM Albums1;AlbumId AlbumName Година ArtistId -------- -------------------- -------- ---- ------------1 Killers 1981 7 2 Powerslave 1984 7 3 Сърфиране с Али 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 of Seas of 1991 13 10 Flying in a Blue Dre 1989 1 11 Black Swans and Worm 2010 1 12 Somewhere in Time 1986 Bigpre 19 7Това е така. Така че нека да продължим и да изтрием всичко:
ИЗТРИВАНЕ ОТ Албуми1;Сега нека отново проверим съдържанието му:
sqlite> ИЗБЕРЕТЕ * ОТ Албуми1;sqlite>(Няма резултати).