Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Excluindo linhas duplicadas em um banco de dados MySQL


Eu faria da seguinte forma:

  1. Crie uma tabela temporária da sua tabela existente:
    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    

  2. Preencha a tabela temporária apenas com os registros desejados:
    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    

  3. Esvazie a mesa
    TRUNCATE TABLE table_with_dupes_in_it
    

  4. Retornar os dados da tabela temporária para a tabela original
    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    

  5. Limpar
    DROP TEMPORARY TABLE data_to_keep
    

Esteja ciente de que isso pode consumir uma enorme quantidade de memória e/ou armazenamento se a tabela em questão for grande. Se for uma tabela grande, eu estaria inclinado a usar uma tabela real em vez de uma tabela temporária para não consumir quantidades excessivas de memória em seu servidor de banco de dados.

EDITAR PARA ADICIONAR:

Se você está preocupado apenas com dupes parciais (linhas em que apenas alguns dos dados são idênticos aos dados inseridos anteriormente), convém usar GROUP BY. Quando você usa GROUP BY, você pode limitar o MySQL para retornar apenas uma linha que contenha dados fornecidos em vez de todos eles.
SELECT *
FROM table
GROUP BY column_name

Você também deve considerar o uso de índices UNIQUE nas colunas que você deseja que não contenham dados duplicados, isso impedirá que os usuários insiram dados duplicados em primeiro lugar.