Eu faria da seguinte forma:
-
Crie uma tabela temporária da sua tabela existente:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Preencha a tabela temporária apenas com os registros desejados:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Esvazie a mesa
TRUNCATE TABLE table_with_dupes_in_it
-
Retornar os dados da tabela temporária para a tabela original
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
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.