você está aqui: Home  → Colunistas  →  Bancos de Dados Livres

Limpando tabelas

Por Luiz Paulo de Oliveira Santos

Data de Publicação: 28 de Outubro de 2006

  Antes de qualquer coisa, sugiro que leia
  atentamente toda a dica, pois nessa dica 
  tratamos APAGAMENTO de informações, então
  todo cuidado é pouco!

Nas listas de discussão, as vezes, circulam questionamentos do tipo: Como faço para zerar completamente o conteúdo de uma tabela? Como apagar todos os registros de uma tabela de uma vez?

Perguntas de novatos? Alguns desenvolvedores dizem que sim, mas o que realmente me surpreende são as respostas!

Então decidi escrever sobre uma instrução muito simples do SQL, mas que poucos desenvolvedores realmente utilizam (pelo menos foi o que detectei lendo as listas).

  TRUNCATE TABLE <tabela>

O TRUNCATE é uma instrução que na teoria retorna a tabela à sua posição inicial após a sua criação.

Mas até aí, o DELETE poderia fazer isso. Porém existe vantagens sobre o DELETE?

A resposta é sim. Principalmente quando:

  • DELETE FROM <tabela> remove cada linha como uma operação independente. Se um índice existe na tabela, cada índice precisa ser atualizado com uma atualização é realizada em uma linha (registro). Se há uma trigger associada a DELETE (antes ou após), a trigger será acionada <n> vezes, o que pode tornar o processo bastante oneroso.

  • TRUNCATE table executa a remoção de todas as linhas e atualiza o índice em uma única operação, em uma transação mais curta. As triggers, mesmo as ativadas são ignoradas durante o processo de TRUNCATE.

Uma diferença do TRUNCATE table para o DROP table é que usando TRUNCATE table não é necessário redefinir privilégicos com GRANT, não é necessário recriar índices, constrains e triggers previamente definidas.

Alguns bancos de dados utilizam índices, e outros um pseudo-código para gerar campos auto-incrementais. Nesses dois casos o TRUNCATE table zera o contador dos campos auto-incrementais. Porém há bancos de dados que armazenam o valor da chave (ou a ser preenchido) em outro local, externo à tabela, em GENERATORs por exemplo, nesses bancos deve-se setar manualmente o valor do GENERATOR.

Observação importante: Citamos nessa dica a função operacional do TRUNCATE table, porém pequenas variações em seu funcionamento, de banco para banco podem ocorrer. Há bancos (comerciais) que após executarmos um TRUNCATE table podemos detectar problemas em VIEWs e TRIGGERS. portanto antes de utilizá-lo, consulte as especificidades do seu banco com relação ao TRUNCATE table.

Até mais e um abraço.

Sobre o autor

Luiz Paulo de Oliveira Santos teve seu primeiro contato com computadores em 1984, estudou BASIC para equipamentos de 8 bits (ZX-81 e Apple 2), em 1985 com o ambiente de 16 bits, e em 1988 com o ambiente de 32 bits. Em 1993 foi um dos primeiros Brasileiros a ter contato com o VBK que em 1995 se tornou o Delphi. Graduou em Tecnologia Em Processamento de Dados, cursou especialização em Análise de Sistemas e atualmente é graduando em Ciências Jurídicas. Atua como analista de suporte de redes da Universidade Metodista de Piracicaba, é editor da revista DB Freemagazine (uma revista gratuíta focada exclusivamente para bancos de dados Cliente/Servidor) e professor nas Faculdades Integradas Einstein de Limeira no curso de Tecnologia em Sistemas de Informação. Tem experiência nas áreas: Sistemas de Computação, Redes e Teleprocessamento de Dados, Bancos de Dados cliente-servidor e SQL. É autor do livro Firebird - Dicas de Segurança, publicado pela Editora Ciência Moderna.

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna