Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

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

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.99/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1552 votos)

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

Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Asterisk na Prática 2ª Edição