sql >> Databáze >  >> RDS >> Mysql

vyčištění db redundantních dat

Přidejte jedinečný index na umístění tabulky, aby se nevložily žádné duplicitní záznamy

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

Tím se automaticky odstraní duplicitní záznamy z tabulky a pro budoucí dotazy na vkládání musíte použít INSERT IGNORE klauzule, abyste se vyhnuli duplicitním chybám.

ale jak navrhuje @AD7six v komentářích nemusí fungovat na verzích MySQL 5.1.41,5.5.1-m2, 6.0 :viz chybu zde

nebo alternativní bezpečný způsob odstranění duplikátů pomocí DELETE dotaz:

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;

znovu nastavit hodnoty auto_increment sloupec locid , stačí vypustit primary key na locid a znovu jej vytvořte:

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

nebo alternativní způsob, jak znovu usadit hodnoty locid pomocí UPDATE dotaz:

SET var_locid = 0;

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


  1. Použití Laravel Raw Query se zástupným symbolem

  2. Uložené procedury MySQL

  3. Jak změnit formát data a času v MySQL

  4. Jak spouštět příkazy mysql z terminálu na instalaci MAMP?