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

почистване на db от излишни данни

Добавете уникален индекс към местоположението на таблицата, така че да не се вмъкват дублиращи се записи

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

Това автоматично ще премахне дублиращи се записи от таблицата и за бъдещи заявки за вмъкване трябва да използвате INSERT IGNORE клауза, за да избегнете дублиращи се грешки.

но както е предложено от @AD7six в коментари може да не работи на MySQL версии 5.1.41,5.5.1-m2, 6.0 :вижте грешка тук

или алтернативен безопасен начин за премахване на дубликати с помощта на DELETE заявка:

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;

за повторно установяване на стойности на auto_increment колона locid , можете просто да пуснете primary key на locid и го създайте отново:

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

или алтернативен начин за повторно установяване на стойности на locid с помощта на UPDATE заявка:

SET var_locid = 0;

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Скорост на заявка въз основа на реда на колоните

  2. MySQL LIMIT при израза DELETE

  3. Настройване на нов екземпляр на MySQL какво е текущата root парола?

  4. Neo4j - Избиране на данни с MATCH с помощта на Cypher

  5. Мога ли да параметризирам името на таблицата в подготвено изявление?