sql >> Database teknologi >  >> RDS >> Mysql

rydde op i db for overflødige data

Tilføj unikt indeks på tabelplacering, så der ikke indsættes duplikerede poster

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

Dette vil automatisk fjerne duplikerede poster fra tabellen, og for fremtidige indsættelsesforespørgsler skal du bruge INSERT IGNORE klausul for at undgå at få duplikerede fejl.

men som foreslået af @AD7six i kommentarer virker det muligvis ikke på MySQL-versioner 5.1.41,5.5.1-m2, 6.0 :se fejl her

eller alternativ sikker måde at fjerne dubletter ved hjælp af DELETE forespørgsel:

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;

for at genindsætte værdier for auto_increment kolonne locid , kan du bare slippe den primary keylocid og genskab det:

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

eller alternativ måde at genindsætte værdier for locid ved hjælp af UPDATE forespørgsel:

SET var_locid = 0;

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


  1. Forespørgsel for at kontrollere tabelstørrelsen i Oracle-databasen

  2. Funktioner vs lagrede procedurer

  3. Hvordan kontrollerer man, om to datointervaller overlapper i mysql?

  4. Tillader MySQL tilbagekald i C, så jeg kan få besked, når der sker en ændring?