você está aqui: Home  → Arquivo de Mensagens

Removendo Duplicidades em MySQL

Colaboração: Marco Antonio Grecco Ribeiro

Data de Publicação: 30 de Setembro de 2006

Na infra-estrutura da UNIFESP - Universidade Federal de São Paulo (http://www.unifesp.br), utilizamos um servidor Linux/MySQL para suprir as necessidades de nossa comunidade quanto ao desenvolvimento de aplicações para a Web utilizando-se uma base de dados. Desta forma, muitas destas bases são criadas sem as devidas precauções e regulamentações propostas em diversas normas.

Nesta ultima semana enfrentamos um problema onde tivemos o esgotamento do espaço em disco da partição onde encontram-se as bases do MySQL. Isto acarretou na duplicação de todos os registros onde eram ausentes os índices, chaves primárias, campos únicos e afins.

O desespero tomou conta de nossa DBA, e a fim de mitigar o seu esforço em desenvolver diversos scripts para "limpar" as bases, utilizamos uma facilidade do MySQL para construir tabelas temporárias segundo um comando SQL.

No exemplo abaixo, temos a tabela chamada "danificada" com registros duplicados e a tabela "temp_danificada" onde colocarei os registros únicos, de acordo com a estrutura da tabela em questão :

  CREATE TEMPORARY TABLE temp_danificada AS SELECT DISTINCT * FROM danificada

Com isto criamos a tabela temporária e podemos agora apagar os dados da tabela original :

  DELETE FROM danificada;

E completando a operação, vamos reinserir os dados na tabela original :

  INSERT INTO danificada(cod,nome) SELECT cod,nome FROM temp_danificada;

Estes comandos devem ser utilizados em sequência. Sugiro que seja montado um script SQL para executar uma só vez:

  CREATE TEMPORARY TABLE temp_danificada AS SELECT DISTINCT * FROM danificada;
  DELETE FROM danificada;
  INSERT INTO danificada(cod,nome) SELECT cod,nome FROM temp_danificada;


 

 

Veja a relação completa dos artigos de Marco Antonio Grecco Ribeiro

Opinião dos Leitores

Airton
09 Jun 2011, 01:56
Obrigado!
Me ajudou muito.
James Umeda
21 Ago 2010, 01:02
Excelente.... exatamente o que eu queria..
Valeu !!!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script