web-dev-qa-db-de.com

Wie benenne ich einen Fremdschlüssel in MySQL um?

Wir haben soeben eine lang andauernde Migration für eine große Tabelle abgeschlossen und die folgende Einschränkung für unsere Tabelle conversation_tags festgestellt:

CONSTRAINT `conversation_tags_ibfk_1` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)

Leider gab es irgendwo einen Fehler, denn was wir wollten, war:

CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`)

Das Löschen und erneute Hinzufügen der Einschränkung würde zwei weitere lange Abfragen bedeuten. Gibt es eine Möglichkeit, die Einschränkung in einer einzelnen Abfrage umzubenennen?

26
Simon

Aus der Dokumentation :

MehrereADD,ALTER,DROPundCHANGEKlauseln sind in single ALTER TABLE Anweisung, getrennt durch Kommas. Dies ist eine MySQL-Erweiterung Für Standard-SQL, die nur eine Klausel pro ALTER TABLE-Anweisung zulässt.

Auf diese Weise können Sie das Ablegen und Wiederherstellen in einer Abfrage kombinieren. Dies sollte schneller sein, als die Einschränkung zu löschen und in zwei Abfragen zu erstellen:

ALTER TABLE conversation_tags
DROP FOREIGN KEY `conversation_tags_ibfk_1`,
ADD CONSTRAINT `fk_conversation_tags_tags` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`);
55
bradoaks

Es tut mir leid, aber Einschränkungen können in mySQL nur gelöscht und erneut angegriffen werden

6
VAShhh

Die Funktion scheint in der mysql ALTER TABLE-Syntax nicht verfügbar zu sein.

Es wird jedoch für Oracle unterstützt.

1
VGE

Bitte beziehen Sie sich auf meine Antwort in MySQL-Terminologie "Einschränkungen" gegenüber "Fremdschlüsseln" Unterschied? um zu verstehen, warum der Constraint-Name anders als gewünscht war. MySQL besitzt jedoch keine Funktion zum Umbenennen von Einschränkungen und muss daher DROP und ADD FK mit dem gewünschten Namen hinzufügen. https://dev.mysql.com/doc/refman/5.5/de/alter-table.html

0
RxBx