Mysql
 sql >> база данни >  >> RDS >> Mysql

Изтриване на дублиращи се редове в MySQL база данни

Бих го направил по следния начин:

  1. Създайте временна таблица от вашата съществуваща таблица:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Попълнете временната таблица само със записите, които искате:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Изпразнете масата

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Върнете данните от временната таблица в оригиналната таблица

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Почистете

    DROP TEMPORARY TABLE data_to_keep
    

Имайте предвид, че това може да изяде огромно количество памет и/или място за съхранение, ако въпросната таблица е голяма. Ако това е голяма таблица, бих бил склонен да използвам истинска таблица вместо временна таблица, за да не изяждам прекалено много памет на вашия DB сървър.

РЕДАКТИРАНЕ ЗА ДОБАВЯНЕ:

Ако просто се притеснявате за частични дупки (редове, в които само някои от данните са идентични с въведените преди това данни), тогава ще искате да използвате ГРУПИРАНЕ ПО. Когато използвате GROUP BY, можете да ограничите MySQL да връща само един ред, който съдържа дадени данни, вместо всички.

SELECT *
FROM table
GROUP BY column_name

Също така трябва да обмислите използването на УНИКАЛНИ индекси в колоните, които искате да не съдържат дублирани данни, това ще попречи на потребителите да вмъкват дублирани данни на първо място.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате дата в .csv файл в SQL формат преди масово вмъкване

  2. SSH тунел за Python MySQLdb връзка

  3. Как да ИЗВИКАТЕ ПРОЦЕДУРА в MySQL?

  4. Получаване на данни за реда на вмъкнатия ред (Mysql, PHP, mysqli)

  5. Как да създадете GraphQL API без сървър за MySQL, Postgres и Aurora