sql >> Databasteknik >  >> RDS >> Mysql

rensa upp db av redundant data

Lägg till unikt index på tabellplatsen så att inga dubbletter av poster kommer att infogas

ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);

Detta tar automatiskt bort dubblettposter från tabellen och för framtida infogningsfrågor måste du använda INSERT IGNORE klausul för att undvika att få dubbletter av fel.

men som föreslagits av @AD7six i kommentarerna kanske det inte fungerar på MySQL-versioner 5.1.41,5.5.1-m2, 6.0 :se felet här

eller alternativt säkert sätt att ta bort dubbletter med DELETE fråga:

DELETE a
FROM location a
     LEFT JOIN (
                SELECT locid
                FROM location
                GROUP BY country, city
               )b
               ON a.locid = b.locid
WHERE b.locid IS NULL;

för att återställa värden för auto_increment kolumn locid , du kan bara släppa primary keylocid och återskapa det:

ALTER TABLE location DROP column locid;
ALTER TABLE location 
      ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

eller alternativt sätt att återställa värden för locid med UPDATE fråga:

SET var_locid = 0;

UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;


  1. Ingen sådan fil eller katalog eller ingen sådan värd är känd när migrering körs

  2. Django:Vilka är de bästa metoderna för att migrera ett projekt från sqlite till PostgreSQL

  3. [UPPDATERAD 2020-01-23] Microsoft Office 365 Build 1912 bryter ODBC-länkade tabellers identitet

  4. Hur man skapar en offline-app för internationalisering:Stöd flera språk