- Beiträge
- 513
Foreign keys:
In einer Tabelle, nenen wir sie fktest, gab es eine Spalte sma_id, die per Foreign Key auf die dazugehörige Haupttablle sma zeigte. Die Spalte wurde irgendwann nicht mehr benötigt, also wurde zuerst der Foreign Key entfernt und dann die Spalte entfernt.
Alles völlig problemfrei. Bis irgendwann später zu Testzwecken ein Dump der Datenbank gemacht wurde und das Wiedereinspielen des Dumps auf einem Testsystem scheiterte, genau bei dieser Tabelle.
Grund: Die Spalte sma_id war korrekt nicht in der Tabelle vorhanden, aber im Dump war der Foreign Key enthalten und der wurde natürlich beim wiedereinspielen versucht anzulegen, wwas ebenso natürlich scheiterte weil es die Spalte ja gar nicht gab.
Bei der Originaltabelle wurden sowohl ANALYZE TABLE wie auch CHECK TABLE gemacht, ohne Ergbenis. Erst ein OPTIMIZE TABLE (bei Innodb entspricht das einem völligen Neuerzeugen der Tabelle) verschwand der spukhafte Foreign Key. Mit ihm leider auch drei weitere Foreign Keys, nämlich alle, die nach dieser Spalte kamen. Diese verschwundenen FK konnte man jetzt aber auch nicht mehr anlegen, weil sie irgendwie noch existierten (im log stand nur "A foreign key constraint of name `xxx` already exists"). Erst ein händisches löschen der Tabelle, Neu-Erzeugen und wiedereinspielen der Daten half.
Ich werde noch versuchen, das nachvollziehbar zu machen und als Fehler zu melden, aber manchmal ist Mysql wirklich gruselig.
In einer Tabelle, nenen wir sie fktest, gab es eine Spalte sma_id, die per Foreign Key auf die dazugehörige Haupttablle sma zeigte. Die Spalte wurde irgendwann nicht mehr benötigt, also wurde zuerst der Foreign Key entfernt und dann die Spalte entfernt.
Alles völlig problemfrei. Bis irgendwann später zu Testzwecken ein Dump der Datenbank gemacht wurde und das Wiedereinspielen des Dumps auf einem Testsystem scheiterte, genau bei dieser Tabelle.
Grund: Die Spalte sma_id war korrekt nicht in der Tabelle vorhanden, aber im Dump war der Foreign Key enthalten und der wurde natürlich beim wiedereinspielen versucht anzulegen, wwas ebenso natürlich scheiterte weil es die Spalte ja gar nicht gab.
Bei der Originaltabelle wurden sowohl ANALYZE TABLE wie auch CHECK TABLE gemacht, ohne Ergbenis. Erst ein OPTIMIZE TABLE (bei Innodb entspricht das einem völligen Neuerzeugen der Tabelle) verschwand der spukhafte Foreign Key. Mit ihm leider auch drei weitere Foreign Keys, nämlich alle, die nach dieser Spalte kamen. Diese verschwundenen FK konnte man jetzt aber auch nicht mehr anlegen, weil sie irgendwie noch existierten (im log stand nur "A foreign key constraint of name `xxx` already exists"). Erst ein händisches löschen der Tabelle, Neu-Erzeugen und wiedereinspielen der Daten half.
Ich werde noch versuchen, das nachvollziehbar zu machen und als Fehler zu melden, aber manchmal ist Mysql wirklich gruselig.