Na lição anterior, aprendemos a criar tabelas com CREATE TABLE. Mas, no trabalho real com bancos de dados, é importante não apenas criar a estrutura, mas também entender como limpar tabelas ou removê-las completamente. Para isso, o SQL oferece as instruções TRUNCATE e DROP TABLE.
As duas pertencem à Linguagem de Definição de Dados (DDL), mas resolvem tarefas diferentes. TRUNCATE remove rapidamente todas as linhas de uma tabela, enquanto DROP TABLE remove a própria tabela junto com sua estrutura.
TRUNCATE fazA instrução TRUNCATE remove todas as linhas de uma tabela, mas a própria tabela continua existindo.
Depois de executar TRUNCATE:
DELETE em massa.TRUNCATETRUNCATE TABLE table_name;
TRUNCATETRUNCATE TABLE logs;
Depois disso, a tabela logs continuará existindo no banco de dados, mas todas as suas linhas terão sido removidas.
DROP TABLE fazA instrução DROP TABLE remove uma tabela completamente.
Depois de executar DROP TABLE:
DROP TABLEDROP TABLE table_name;
DROP TABLEDROP TABLE old_reports;
Depois disso, a tabela old_reports será removida completamente do banco de dados.
TRUNCATE difere de DROP TABLEEmbora ambas as instruções removam dados, existe uma diferença fundamental entre elas.
TRUNCATE remove apenas as linhas.DROP TABLE remove tanto as linhas quanto a própria tabela.TRUNCATE, a tabela continua existindo e novos dados podem ser inseridos nela novamente.DROP TABLE, a tabela deixa de existir, e ela precisa ser recriada antes de voltar a ser usada.TRUNCATE é adequado quando você precisa limpar rapidamente uma tabela, mas quer manter sua estrutura.DROP TABLE é adequado quando a tabela não será mais necessária.TRUNCATE difere de DELETEIniciantes frequentemente comparam TRUNCATE com DELETE, porque ambos podem remover dados de uma tabela.
As principais diferenças são:
DELETE pode ser usado com WHERE, removendo apenas parte das linhas;TRUNCATE remove todas as linhas da tabela de uma vez;DELETE pertence ao DML, enquanto TRUNCATE normalmente é tratado como DDL;TRUNCATE costuma ser mais rápido em muitos SGBDs quando a tabela inteira precisa ser esvaziada;Se você precisa remover apenas parte dos dados, normalmente a escolha certa é DELETE. Se precisa limpar rapidamente a tabela inteira, mantendo sua estrutura, TRUNCATE costuma ser mais conveniente.
Ao usar TRUNCATE e DROP TABLE, é importante lembrar algumas regras:
DROP TABLE se a estrutura da tabela ainda será necessária;DELETE por TRUNCATE se for preciso remover apenas parte das linhas;TRUNCATE não pode ser executado se a tabela for referenciada por chaves estrangeiras;TRUNCATE e a possibilidade de rollback dependem do SGBD específico.O uso incorreto dessas instruções pode levar à perda de dados ou da estrutura da tabela.
Imagine que temos uma tabela auxiliar chamada daily_import, na qual dados intermediários de um sistema externo são carregados todos os dias.
Se a tabela é usada regularmente, mas precisa ser completamente esvaziada antes de cada nova carga, TRUNCATE é uma boa escolha:
TRUNCATE TABLE daily_import;
Depois disso, a estrutura da tabela permanece e novos dados podem ser carregados nela novamente.
Se a tabela foi criada apenas para uma tarefa pontual e não será mais necessária, ela pode ser removida completamente:
DROP TABLE daily_import;
No primeiro caso, preparamos a tabela existente para reutilização. No segundo, removemos completamente do banco de dados um objeto que não é mais necessário.
Principais conclusões desta lição:
TRUNCATE remove todas as linhas de uma tabela, mas mantém sua estrutura.DROP TABLE remove tanto os dados quanto a própria tabela.TRUNCATE e DELETE resolvem problemas parecidos, mas funcionam de forma diferente.TRUNCATE e DROP TABLE pode variar um pouco entre diferentes SGBDs.Na próxima lição, veremos as tabelas temporárias e entenderemos em quais casos elas são úteis para resultados intermediários.