O
DELETE
pode ser usada para excluir dados em uma tabela. O
WHERE
cláusula pode ser usada para especificar exatamente quais linhas devem ser excluídas. Você pode excluir todas as linhas, algumas linhas ou nenhuma, dependendo das condições de filtragem aplicadas pelo
WHERE
cláusula. Uma exclusão simples
Primeiro, vamos encontrar um artista para excluir:
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 Australian jazz band centred around poly 9 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, vamos excluir o artista número 12 (Assassino).
Aqui está a instrução de exclusão simples que exclui esse registro dos Artistas tabela:
DELETE FROM Artists WHERE ArtistId = 12;
Então, depois de executar isso, podemos verificar se o registro foi de fato excluído com um
SELECT
demonstração:sqlite> SELECT * FROM Artists WHERE ArtistId = 12; sqlite>
(Sem resultados).
Exclusão de dados com restrição de chave estrangeira
Se você tentar excluir um registro referenciado por uma chave estrangeira, deverá receber um erro. Você precisará excluir os registros de chave estrangeira primeiro, antes de excluir o registro de chave primária.
Por exemplo, ID do artista 17 (dos Artistas table) é referenciado por dois registros em Albums tabela (veja o ArtistId coluna):
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; AlbumId AlbumName ReleaseDate ArtistId -------- -------------------- ------------ ------------ 5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
Então, se tentarmos excluir o artista 17 da tabela Artists (que contém a chave primária), devemos receber um erro.
Aqui está a declaração de exclusão:
DELETE FROM Artists WHERE ArtistId = 17;
E aqui está o resultado:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; Error: FOREIGN KEY constraint failed sqlite>
Portanto, precisamos excluir os registros de chave estrangeira antes de excluir a chave primária.
Se você não recebeu uma restrição FOREIGN KEY falhou mensagem, pode ser necessário habilitar a verificação de restrição de chave estrangeira. Execute
PRAGMA foreign_keys = ON;
para habilitar verificações de restrição de chave estrangeira. Excluir registros associados
Então, vamos excluir os registros associados nos Álbuns table, antes de tentar a instrução delete acima novamente.
DELETE FROM Albums WHERE ArtistId = 17;
Verifique se eles foram excluídos:
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; sqlite>
(Sem resultados).
Agora vamos tentar a instrução delete original novamente:
DELETE FROM Artists WHERE ArtistId = 17;
Parece promissor - sem erro:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; sqlite>
E um
SELECT
declaração confirma a exclusão:sqlite> SELECT * FROM Artists WHERE ArtistId = 17; sqlite>
Sem resultados.
Excluir todas as linhas
Você pode excluir todas as linhas em uma tabela omitindo o
WHERE
cláusula. Temos uma tabela sobressalente ( Albums1 ), então vamos tentar nesse.
Primeiro, vamos apenas verificar se ele realmente contém dados:
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 13 Big Red Car 1995 17
Sim. Então vamos em frente e excluir tudo:
DELETE FROM Albums1;
Agora vamos verificar seu conteúdo novamente:
sqlite> SELECT * FROM Albums1; sqlite>
(Sem resultados).