Excluir (SQL) - Delete (SQL)
Na linguagem de consulta estruturada de banco de dados ( SQL ), a instrução DELETE remove um ou mais registros de uma tabela . Um subconjunto pode ser definido para exclusão usando uma condição, caso contrário, todos os registros são removidos. Alguns sistemas de gerenciamento de banco de dados (DBMSs), como o MySQL , permitem a exclusão de linhas de várias tabelas com uma instrução DELETE (às vezes, isso é chamado de DELETE de várias tabelas).
Exemplos
Exclua as linhas das tortas da mesa em que o sabor da coluna seja igual ao Merengue de Limão :
DELETE FROM pies
WHERE flavor='Lemon Meringue';
Exclua linhas nas árvores , se o valor da altura for menor que 80.
DELETE FROM trees
WHERE height < 80;
Exclua todas as linhas de mytable :
DELETE FROM mytable;
Exclua linhas de mytable usando uma subconsulta na condição where:
DELETE FROM mytable
WHERE id IN (
SELECT id
FROM mytable2
);
Exclua linhas de mytable usando uma lista de valores:
DELETE FROM mytable
WHERE id IN (
value1,
value2,
value3,
value4,
value5
);
Suponha que haja um banco de dados simples que lista pessoas e endereços. Mais de uma pessoa pode morar em um determinado endereço e uma pessoa pode morar em mais de um endereço (este é um exemplo de relacionamento muitos para muitos ). O banco de dados possui apenas três tabelas, pessoa , endereço e pa , com os seguintes dados:
|
|
|
A tabela pa relaciona as tabelas de pessoa e endereço, mostrando que Joe, Bob e Ann moram todos na Main Street de 2001, mas Joe também mora no Pico Boulevard.
Para remover joe do banco de dados, duas exclusões devem ser executadas:
DELETE FROM person WHERE pid=1;
DELETE FROM pa WHERE pid=1;
Para manter a integridade referencial, os registros de Joe devem ser removidos de pessoa e pa . Os meios pelos quais a integridade é mantida podem acontecer de forma diferente em vários sistemas de gerenciamento de banco de dados relacional. Pode ser que, além de ter apenas três tabelas, o banco de dados também tenha sido configurado com um gatilho para que, sempre que uma linha for excluída de pessoa, quaisquer linhas vinculadas sejam excluídas de pa . Então a primeira afirmação:
DELETE FROM person WHERE pid=1;
seria automaticamente acionar o segundo:
DELETE FROM pa WHERE pid=1;
Comandos relacionados
Excluir todas as linhas de uma tabela pode consumir muito tempo. Alguns SGBDs oferecem um comando TRUNCATE TABLE que funciona muito mais rápido, pois altera apenas os metadados e normalmente não perde tempo impondo restrições ou acionando gatilhos.
DELETE exclui apenas as linhas. Para excluir uma tabela inteiramente, o comando DROP pode ser usado.