Wie sehe ich alle Fremdschlüssel einer Tabelle oder Spalte?
In MySQL, wie bekomme ich eine Liste aller foreign key-Einschränkung verweist auf eine bestimmte Tabelle? eine bestimmte Spalte? Dies ist die gleiche Sache wie diese Oracle-Frage, aber für MySQL.
InformationsquelleAutor Christian Oudard | 2008-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine Tabelle:
Für eine Spalte:
Grundsätzlich geändert REFERENCED_TABLE_NAME mit REFERENCED_COLUMN_NAME in der where-Klausel.
Sind Sie sicher, dass Sie Fragen über die richtige Tabelle? Wenn Knoten in der Abfrage zu arbeiten, dann sind Sie wahrscheinlich Fragen, über die andere Richtung (d.h., Schlüssel AUS der Tabelle mytable, nicht die Schlüssel ZU mytable.) Das erwartet Sie schrieb '<table>' der Tabelle name ist, und ohne das '<' und '>'?
Scheint, wie ich Sie falsch verstanden-Abfrage, weil ich die Abfrage für Schlüssel verweisen auf die AUS den <table> 🙂 (ja, ich schrieb Tabellennamen anstelle von "<table>" XD)
Es sei denn, Sie sind sicher, dass Ihre Tabelle eindeutig ist, werden Sie wahrscheinlich wollen, beschränken Sie die Abfrage auf eine bestimmte Datenbank. Ändern Sie die where-Klausel wie dieser:
where REFERENCED_TABLE_SCHEMA = 'mydatabase' and REFERENCED_TABLE_NAME = 'mytable'
Dies wird nicht funktionieren, im Falle der nicht-root-Benutzer, obwohl der Benutzer über alle Berechtigungen für die Datenbank
InformationsquelleAutor Vinko Vrsalovic
EDIT: Wie schon in den Kommentaren, das ist nicht die richtige Antwort auf OPs Frage, aber es ist nützlich zu wissen, mit diesem Befehl. Diese Frage zeigte sich in Google für das, was ich suchte, und dachte, ich würde verlassen Sie, dass diese Antwort für die anderen zu finden.
Ich fand diese Antwort hier:
MySQL : show Einschränkungen für Tabellen Befehl
Brauchte ich diese Weg, weil ich wollte, um zu sehen, wie die FK funktioniert, anstatt einfach nur zu sehen, ob es existiert oder nicht.
<yourtable>
, nicht allen Zwängen, zeigen Sie auf<yourtable>
.@Barmar sagt, das ist völlig falsch; es zeigt, der Fremdschlüssel, Zugehörigkeit zu der angegebenen Tabelle, aber nicht die Fremdschlüssel zeigen die Tabelle, die ist, was die Frage fragt nach. Keine Ahnung, wie diese bekam 50 upvotes; ich denke, die Menschen hier gelandet, wenn wirklich waren Sie auf der Suche nach der Antwort auf die gegenteilige Frage, fand Ihre Antwort hier sowieso, und nicht die Mühe das Lesen der ursprünglichen Frage (oder sogar Titel) vor upvoting.
dies ist das erste Ergebnis des
display foreign keys mysql
im google, vielleicht deshalb 😉thisi zeigt eigentlich allen Zwängen, die existieren, phpmyadmin zeigt dir nur ein Hinweis auf Ihren Tisch. scheint gut genug, um Duplikate zu vermeiden mit einem ORM-tool
Dies ist, was ich suchte, also vielen Dank für die Veröffentlichung, obwohl es nicht beantworten, OP ' s Frage. Schadet nie zu wissen, wie man in beide Richtungen in einer Beziehung!
InformationsquelleAutor CenterOrbit
Wenn Sie InnoDB und definiert FK ' s, Sie könnten die Abfrage der information_schema-Datenbank, z.B.:
Diese funktioniert besser in meinem Fall. Ich brauche die Tropfen alle foreign key-Einschränkung (und nur diese) aus einer Tabelle ändern zu können, die InnoDB-engine MyISAM-oder NDB.
Erhalten Sie die Fremdschlüssel in beiden Richtungen von der REFERENTIAL_CONSTRAINTS-Tabelle – ich habe noch eine Lösung mit der Abfrage.
InformationsquelleAutor Node
Veröffentlichung auf eine alte Antwort, fügen Sie einige nützliche Informationen.
Ich hatte ein ähnliches problem, aber ich wollte auch sehen, die CONSTRAINT_TYPE zusammen mit den REFERENZIERTEN Tabellen-und Spaltennamen. So,
Sehen alle FKs in der Tabelle:
Sehen alle Tabellen und FKs in Ihrem schema:
Sehen alle die FKs in Ihrer Datenbank:
Erinnern!
Ist die Verwendung der InnoDB-Speicher-engine. Wenn Sie kann nicht scheinen, um alle Fremdschlüssel zu zeigen, bis nach dem hinzufügen es ist wahrscheinlich, weil Ihre Tabellen mit MyISAM.
Überprüfen:
Zu beheben, verwenden Sie diese:
tolle Antwort. Haben Sie irgendwelche Lösungen für MyISAM?
MyISAM unterstützt keine foreign keys, leider. dev.mysql.com/doc/refman/5.7/en/myisam-storage-engine.html
InformationsquelleAutor Andy
Als alternative zu Knoten beantworten, wenn Sie InnoDB und definiert FK ' s, Sie könnten die Abfrage der information_schema-Datenbank, z.B.:
für ausländische keys von <table>, oder
für foreign-keys <table>
Können Sie auch die UPDATE_RULE und DELETE_RULE, wenn Sie wollen.
Dabei Entdeckung über eine Tabelle, die Sie sollten nicht vergessen, dass die Fremdschlüssel hergestellt werden kann, kann in BEIDE Richtungen!
InformationsquelleAutor ChrisV
Diese Lösung wird nicht nur anzeigen, alle Beziehungen, sondern auch die Einschränkung name, das ist in einigen Fällen erforderlich (z.B. drop-contraint):
Wenn Sie wollen überprüfen Sie die Tabellen in einer bestimmten Datenbank, am Ende der Abfrage fügen Sie den schema-Namen:
Ebenfalls für eine bestimmte Spalte name, add
am Ende der Abfrage.
Inspiriert von diesem post hier
InformationsquelleAutor Panayotis
Mit REFERENCED_TABLE_NAME funktioniert nicht immer und kann ein NULL-Wert. Die folgende Abfrage kann Arbeit statt:
InformationsquelleAutor Hazok
Einen schnellen Weg, um Ihre FKs (Foreign-Key-Referenzen) mit dem
Diese Abfrage geht davon aus, dass die Einschränkungen und alle referenzierten und referenzierenden Tabellen im gleichen schema.
Fügen Sie Ihre eigenen Kommentar.
Quelle: das offizielle mysql-Handbuch.
InformationsquelleAutor Daniel Rodas
Die Lösung kam ich mit zerbrechlich ist; es stützt sich auf django-Namenskonvention für foreign keys.
Dann in der shell aus,
InformationsquelleAutor Christian Oudard
Finden Sie alle Tabellen mit einem bestimmten Fremdschlüssel wie
employee_id
InformationsquelleAutor Anthony Vipond
Wenn Sie wollen auch, um den Namen der foreign-key-Spalte:
InformationsquelleAutor omarjebari