Pular para o conteúdo

Diferença entre os comandos TRUNCATE, DELETE e DROP: Qual usar?

Diferença entre os comandos TRUNCATE, DELETE e DROP

No artigo de hoje veremos as diferenças entre os comandos DELETE table, TRUNCATE table  e DROP table e qual deles poderão atender as suas necessidades.

DELETE

O comando DELETE é usado para remover linhas de uma tabela. Uma cláusula WHERE  pode ser usada apenas para remover algumas linhas. Se nenhuma condição WHERE é especificada, todas as linhas serão removidas.

Depois de realizar uma operação de exclusão que você precisa efetuar o comando COMMIT para  confirmar exclusão ou o comando ROLLBACK para reverter a transação de efetuar a mudança.

Note-se que esta operação fará com que todas as TRIGGERS de DELETE na tabela sejam disparados, caso elas existam.

SQL> delete from  TESTE.t3;
20 rows deleted.
SQL>

SQL> delete from TESTE.emp where JOB=’SALESMAN’;
4 rows deleted.
SQL>

SQL> delete from  TESTE.t3 where x2=10;
1 row deleted.
SQL> commit;
Commit complete.
SQL>

SQL>  delete from TESTE.emp where JOB=’CLERK’;
4 rows deleted.
SQL> rollback;
Rollback complete.
SQL>

TRUNCATE

O comando TRUNCATE remove todas as linhas de uma tabela. Esta operação não pode ser revertida e nenhuma TRIGGER será disparada.

Como tal, TRUCATE é mais rápido e não usa espaço de UNDO como o comando DELETE.

SQL> select count(*) from teste.exemplo;
COUNT(*)
———-
14
SQL> truncate table teste.exemplo;
Table truncated.

SQL> select count(*) from teste.exemplo;
COUNT(*)
———-
0
SQL>

DROP

O comando DROP remove uma tabela do banco de dados. Todas as linhas de tabelas, índices e privilégios também serão removidos.

Não há retorno dos dados caso seja necessário, a menos que a recyclebin esteja habilitada, veja mais sobre este assunto neste post.

SQL> drop table teste.exemplo;
Table dropped.

SQL> select count(*) from teste.exemplo;
select count(*) from teste.exemplo
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL>

Diferença entre TRUNCATE e DELETE

1 – TRUNCATE é um comando DDL enquanto DELETE é um comando DML.

2 – TRUNCATE é muito mais rápido do que o DELETE.

Motivo: Quando você digita DELETE todos os dados a serem excluídos são copiados primeiro para  Tablespace de UNDO.

Depois a operação de deleção é realizada. Quando você digita ROLLBACK após a exclusão de linhas numa  tabela, você pode obter de volta os dados (O Banco usa os dados que estão na Tablespace de UNDO para desfazer as mudanças).

Quando você digita o comando  TRUNCATE, ele remove os dados diretamente sem copiá-lo para Tablespace de UNDO, por isso o comando TRUNCATE é mais rápido.

3 – Não existe Rollback para o comando TRUNCATE mas para o DELETE sim. O comando TRUNCATE remove o registro permanente.

4 – Em caso de TRUNCATE, A TRIGGER não é disparada, mas no caso do comando DELETE, existindo TRIGGER para deleção a mesma é disparada.

5 – Você não pode usar condições (cláusula WHERE) com o comando TRUNCATE. Mas com o comando DELETE, você pode escrever usando condições (cláusula WHERE).

OBS: Há mais uma diferença entre esses dois comandos, o TRUNCATE reseta a Marca d’água para uma tabela, o comando delete não.

Se você tem uma restrição de chave estrangeira, consultando a tabela que você está tentando truncar, o comando TRUNCATE não vai funcionar  mesmo que a  tabela referida não contenha dados. Isso pode ser realizado,desativando temporariamente a restrição de chave estrangeira para a tabela que se deseja truncar.

Se você está removendo uma grande quantidade de dados (por exemplo, a tabela de log de depuração), então faz sentido usar o comando TRUNCATE para limpar a tabela, caso você não esteja preocupado com a necessidade de recuperá-la como parte de uma transação.

Conclusão:

Comando DROP é um comando DDL. Ela remove a informação, juntamente com a estrutura(Tabela).

Ele também remove todas as informações sobre a tabela no dicionário de dados.

Comando TRUNCATE é comando DDL. Ele remove todas as informações da tabela. Com relação ao desempenho, se você tem que eliminar todas as linhas de uma tabela, você deve executar o comando TRUNCATE.

O comando DELETE é um comando DML. Ele fornece a facilidade de exclusão condicional à base. Também gera informações para REDO LOGS e UNDO. Se você tem que eliminar todas as linhas de uma tabela, você deve executar o comando TRUNCATE.

O comando DELETE é um comando DML. Ele fornece a facilidade de exclusão condicional à base. Também gera informações para REDO LOGS e UNDO.

smsleitao

smsleitao

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress