2017-09-29 4 views
0

I unten TabellenMySQL Primärschlüssel Umbenennung

1. TABLE1 (Primary Key ID) 
2. TABLE2 (ID Foreign key reference from TABLE1) 
3. TABLE3 (ID Foreign key reference from TABLE1) 
4. TABLE4 (ID Foreign key reference from TABLE1) 
5. TABLE5 (ID Foreign key reference from TABLE1) 

Vor allen 5 Tabellen hat riesige Daten.

Jetzt versuche ich, indem SET FOREIGN_KEY_CHECKS = 0; aber nicht in der Lage zu benennen und immer unter Fehler

Fehlercode ID als OLD_ID in TABLE1

I ID-Spalte umbenennen möchten Umbenennen: 1846 algorithm = COPY wird nicht unterstützt. Grund: Die Spalten , die an einem Fremdschlüssel teilnehmen, werden umbenannt. Probieren Sie ALGORITHM = INPLACE aus.

Ich weiß, wenn ich Fremdschlüssel aus allen untergeordneten Tabelle löschen und dann leicht umbenennen können wir tun. Aber Removing und Hinzufügen von Fremdschlüssel in der Child-Tabelle nimmt viel Zeit aufgrund der riesigen Datenmenge.

Bitte schlagen Sie vor, wie Sie das Primärschlüsselfeld am besten umbenennen können?

Ich mache diese Aktivität in MySql.

+0

Kennen Sie den Namen der Fremdschlüsseleinschränkung? –

+0

Ja. Ich kenne den Constraint-Namen –

Antwort

0

Eigentlich sein ein Fehler in MySql - https://bugs.mysql.com/bug.php?id=82946

wonach - mit foreign_key_checks = 0 ist, erlaubt InnoDB ein Index durch eine Fremdschlüssel erforderlich fallen gelassen werden, um die Tabelle in einen inkonsistent Platzierung und verursacht die Fremdschlüsselprüfung, die beim Laden der Tabelle zum Fehlschlagen auftritt. InnoDB verhindert jetzt das Löschen eines Indexes, der für einen Fremdschlüssel erforderlich ist Constraint, auch bei foreign_key_checks = 0. Die Fremdschlüsseleinschränkung muss vor dem Löschen des Fremdschlüsselindex entfernt werden.

auch in mysql Referenzdokument erwähnt - https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_foreign_key_checks

So müssen u zuerst die ausländischen Drop Schlüssel

Die Lösung besteht darin, zuerst den Fremdschlüssel fällt, dann die Spalte ändern, schließlich die Einschränkung Zugabe zurück in .

ALTER TABLE `TABLE1` 
DROP FOREIGN KEY `mytable_oldname_fk`, 
CHANGE COLUMN oldname newname INT(11) DEFAULT NULL, 
ADD CONSTRAINT `mytable_newname_fk` FOREIGN KEY (`newname`) REFERENCES `anothertable` (`id`) 
Verwandte Themen