sql >> Database >  >> RDS >> Mysql

db van overbodige gegevens opschonen

Voeg een unieke index toe op de tafellocatie zodat er geen dubbele records worden ingevoegd

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

Hiermee worden dubbele records automatisch uit de tabel verwijderd en voor toekomstige invoegquery's moet u INSERT IGNORE gebruiken clausule om dubbele fouten te voorkomen.

maar zoals voorgesteld door @AD7six in opmerkingen werkt het mogelijk niet op MySQL-versies 5.1.41,5.5.1-m2, 6.0 :zie bug hier

of alternatieve veilige manier om duplicaten te verwijderen met DELETE vraag:

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;

om waarden van auto_increment opnieuw in te stellen kolom locid , kunt u gewoon de primary key . laten vallen op locid en maak het opnieuw:

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

of alternatieve manier om waarden van locid opnieuw in te stellen met behulp van UPDATE vraag:

SET var_locid = 0;

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


  1. Eén beveiligingssysteem voor toepassingen, pooling van verbindingen en PostgreSQL - de zaak voor LDAP

  2. Tabel wijzigen in SQL Server met behulp van Alter Statement - SQL Server / T-SQL Tutorial Part 35

  3. JSON_UNQUOTE() – Verwijder aanhalingstekens uit een JSON-document in MySQL

  4. MYSQL verschilt in Uitvoer van script