Próbuję usunąć duplikaty z tabeli MySQL za pomocą ALTER IGNORE TABLE + UNIKALNY KLUCZ. Dokumentacja MySQL mówi:MySQL: ALTER IGNORE TABLE daje "naruszenie ograniczenia integralności"
IGNORE jest rozszerzeniem MySQL do standardowego SQL. Kontroluje sposób działania ALTER TABLE, jeśli istnieją duplikaty na unikalnych klawiszach w nowej tabeli lub jeśli ostrzeżenia pojawią się, gdy włączony jest tryb ścisły. Jeśli IGNORE nie zostanie określony, kopia zostanie przerwana i wycofana, jeśli wystąpią błędy klucza duplikatu. Jeśli określono IGNORE, tylko pierwszy wiersz jest używany w wierszach z duplikatami na unikalnym kluczu. Pozostałe sprzeczne wiersze są usuwane. Niepoprawne wartości są obcinane do najbliższej pasującej wartości dopuszczalnej.
Kiedy uruchomić kwerendę ...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
... I jeszcze dostać błąd # 1062 - Powielanie wejścia 'blabla' dla klucza 'dupidx'.
W tym linkiem do problemu InnoDB jest sugerowane obejście pierwszym uruchomieniu 'ustawiony sesji old_alter_table = 1;' to pracował! mnie. – Peter
Dzięki Peter - to wydaje się teraz działać dla mnie. Nie miałem pojęcia o tym problemie - moja maszyna deweloperska to mariadb, ale kiedy musiałem uruchomić na produkcji (mysql 5.5) wpadłem na to. Ten stackoverflow uratował mój dzień! – spidie
Jest to prawdopodobnie najgorsza zaakceptowana odpowiedź, jaką kiedykolwiek widziałem w Stack Overflow. Wymiana silników do przechowywania danych jest znaczącym przedsięwzięciem samo w sobie, nawet w przypadku średnich stołów. Te trzy zapytania mogą potencjalnie zablokować serwer bazy danych na wiele godzin. To nie jest niczym rozwiązanie. – Mikkel