sql >> Base de Datos >  >> RDS >> Mysql

Eliminación de filas duplicadas en una base de datos MySQL

Yo lo haría de la siguiente manera:

  1. Cree una tabla temporal a partir de su tabla existente:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Rellene la tabla temporal solo con los registros que desee:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Vaciar la mesa

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Devolver los datos de la tabla temporal a la tabla original

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Limpiar

    DROP TEMPORARY TABLE data_to_keep
    

Tenga en cuenta que esto puede consumir una gran cantidad de memoria y/o almacenamiento si la tabla en cuestión es grande. Si se trata de una tabla grande, me inclinaría a usar una tabla real en lugar de una tabla temporal para no consumir cantidades excesivas de memoria en su servidor DB.

EDITAR PARA AÑADIR:

Si solo le preocupan los duplicados parciales (filas en las que solo algunos de los datos son idénticos a los datos ingresados ​​​​anteriormente), querrá usar GROUP BY. Cuando usa GROUP BY, puede limitar MySQL para devolver solo una fila que contenga datos dados en lugar de todos ellos.

SELECT *
FROM table
GROUP BY column_name

También debe considerar usar índices ÚNICOS en las columnas que no desea que contengan datos duplicados, esto evitará que los usuarios inserten datos duplicados en primer lugar.