Vor einiger Zeit wollte ich eine inkonsistente mySQL-Datenbank bereinigen. Diese wurde durch Unwissenheit mit den folgenden Befehlen von jedem Statement in den entsprechenden Zustand gebracht:
SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
Die fehlerhaften Datensätze waren mit einem Script auch schnell ausgemacht (GROUP BY Primary-Key-Felder HAVING COUNT(*) > 0). Doch dann musste ich verwundert feststellen, dass ich diese doppelten Schlüssel mit einem einzelnen Statement nicht zu sehen bekam:
Nach einer kurzen Denkpause, und einer Query-Analyse mit dem Keyword EXPLAIN, wurde schnell klar, dass der Index des Primärschlüssels selbstverständlich nur einen der beiden Datensätze kannte. Um den Index zu umgehen / nicht zu nutzen, musste ich die Abfrage also anpassen:
Nun sieht man beide Datensätze und einer Bereinigung steht nichts mehr im Wege.