Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Usuwanie zduplikowanych wierszy w bazie danych MySQL

Zrobiłbym to w następujący sposób:

  1. Utwórz tabelę tymczasową z istniejącej tabeli:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Wypełnij tabelę tymczasową tylko tymi rekordami, które chcesz:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Opróżnij stół

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Zwróć dane z tabeli tymczasowej do oryginalnej tabeli

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Posprzątaj

    DROP TEMPORARY TABLE data_to_keep
    

Pamiętaj, że może to pochłonąć ogromną ilość pamięci i/lub pamięci, jeśli dany stół jest duży. Jeśli jest to duży stół, byłbym skłonny użyć prawdziwej tabeli zamiast tabeli tymczasowej, aby nie zużywać nadmiernej ilości pamięci na serwerze DB.

EDYCJA, ABY DODAĆ:

Jeśli martwisz się tylko częściowymi duplikatami (wiersze, w których tylko niektóre dane są identyczne z wcześniej wprowadzonymi danymi), to będziesz chciał użyć GROUP BY. Używając GROUP BY, możesz ograniczyć MySQL do zwracania tylko jednego wiersza zawierającego dane, a nie wszystkich.

SELECT *
FROM table
GROUP BY column_name

Powinieneś również rozważyć użycie indeksów UNIQUE w kolumnach, w których nie chcesz przechowywać zduplikowanych danych, co w pierwszej kolejności uniemożliwi użytkownikom wstawianie zduplikowanych danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie backquote/backticks dla zapytań mysql

  2. Czy indeksy zostaną użyte w przypadku zapytania o podzbiór kolumn indeksu?

  3. SELECT INTO OUTFILE nie można zapisać do pliku

  4. Jak uzyskać wolne terminy z rezerwacjami?

  5. Znaczenie backticku wokół nazwy tabeli w zapytaniu MySQL