SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite - Excluir dados


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