Diferenças entre Truncate table, Drop table ou Delete from

Muitas vezes nos deparamos com a situação de limpar os registros em alguma determinada tabela.
Porem, qual comando usar? Qual comando é mais rápido para o Banco de dados? Ou qual comando atenderá a sua necessidade?

Veremos a seguir qual é o melhor caminho para a sua necessidade.

Truncate table: É um DDL, serve para remover todas as linhas de uma tabela. Com o comando truncate você não tem a opção de escolher quais dados remover e não há retorno dos mesmos caso necessite, Este comando remove a marca d’agua da tabela limpando a mesma para uma próxima utilização.

Sintaxe:
Truncate table <table_name>;

exemplo:

SQL> truncate table trunc_table;

Table truncated.

SQL>

Drop table: Também é um comando DDL, serve para remover toda a tabela (estrutura, indices, contraints, etc…), não há retorno dos dados caso seja necessário, a menos que a recyclebin do oracle esteja habilitada, veja mais sobre este assunto neste post.

Sintaxe:
Drop table <table_name>;
exemplo:

SQL> drop table trunc_table;

Table dropped.

SQL>

Delete from: É um comando DML e serve para remover registros da tabela, semelhante ao truncate, com mais opções, com ele é permitido você deletar apenas alguns registros da tabela alvo. Porem este comando não remove a marca d’agua da tabela mantendo a mesma do mesmo tamanho caso seja um delete full.

Sintaxe:
delete from <table_name> [where coluna=valor];

exemplo:
Para o exemplo foi criado uma tabela com os dados da visão v$tablespace;

SQL> create table trunc_table as select * from v$tablespace;

Table created.

SQL> select * from trunc_table;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 SYSAUX                         YES NO  YES
         2 UNDOTBS1                       YES NO  YES
         4 USERS                          YES NO  YES
         3 TEMP                           NO  NO  YES

SQL> delete from trunc_table where NAME='SYSTEM';

1 row deleted.

SQL> select * from trunc_table;

       TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         1 SYSAUX                         YES NO  YES
         2 UNDOTBS1                       YES NO  YES
         4 USERS                          YES NO  YES
         3 TEMP                           NO  NO  YES

SQL> delete from trunc_table;

4 rows deleted.

SQL> select * from trunc_table;

no rows selected

SQL>

Observe que criei a tabela com os dados da visão v$tablespace, após o mesmo deletei apenas um registro com o campo “where NAME=’SYSTEM'” e após conferir, deletei os outros registros.

Resumindo.

Caso queira deletar todos os registros de uma tabela, por ser mais rápido e por já limpar a marca d’agua da tabela é aconselhável utilizar o truncate, Caso seja necessário deletar apenas alguns registros da tabela sugiro utilizar o delete, e caso você deseja eliminar a tabela de seu Banco de dados Oracle juntamente com os objetos referentes a esta tabela o “drop table”, é a solução.

%name Diferenças entre Truncate table, Drop table ou Delete from

Autor: Leandro Lana

Trabalho com banco de dados Oracle desde 2006, já trabalhei com as plataformas 9i, 10G, 11G, 12C, 18C, 19C e 21(ainda em testes).

Trabalhando atualmente como consultor Oracle na MigraTI Soluções em TI como administrador de banco de dados Oracle, SQL-Server, MySQL e Postgresql.

Contato: leandro.lana@migrati.com.br

Fone: (47) 9191-6052 / (47) 3328 0996

Certificações:

OCA 10G.

OCP 10G.

OCE Linux.

OCE RAC/Cluster.

MCP SQL-Server 2008.

MCITP SQL-Server 2008.

DB2 Fundamentals.