Mysql
 sql >> Baza danych >  >> RDS >> Mysql

czyszczenie db zbędnych danych

Dodaj unikalny indeks w lokalizacji tabeli, aby nie wstawiać zduplikowanych rekordów

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

Spowoduje to automatyczne usunięcie zduplikowanych rekordów z tabeli, a dla przyszłych zapytań wstawiania musisz użyć INSERT IGNORE klauzula, aby uniknąć zduplikowanych błędów.

ale zgodnie z sugestią @AD7six w komentarzach może nie działać w wersjach MySQL 5.1.41,5.5.1-m2, 6.0 :zobacz błąd tutaj

lub alternatywny bezpieczny sposób usuwania duplikatów za pomocą DELETE zapytanie:

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;

aby zresetować wartości auto_increment kolumna locid , możesz po prostu upuścić primary key na locid i odtwórz go:

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

lub alternatywny sposób na zresetowanie wartości locid za pomocą UPDATE zapytanie:

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. Jak wykonać polecenie MySQL z hosta do kontenera z uruchomionym serwerem MySQL?

  2. Naruszenie ograniczenia integralności:1452 Nie można dodać ani zaktualizować wiersza podrzędnego:

  3. Mysql:Znajdź wiersze, w których różnica znaczników czasu jest mniejsza niż x

  4. Jak grupować według tygodnia w MySQL?

  5. Wypełnianie zdarzeń w pełnym kalendarzu javascript z bazy danych