MySQL: So überprüfen Sie Fremdschlüssel in Bezug auf eine Tabelle

43

Wie kann ich Fremdschlüssel zu einer Tabelle in MySql anzeigen?

Hintergrund : Ich wollte eine Tabelle in MySQL löschen, für die eine Fremdschlüsseleinschränkung besteht. Wenn ich es tue, bekomme ich Folgendes:

Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails

Wie kann ich Fremdschlüssel löschen, die sich auf die Tabelle beziehen und andere zurücklassen?

Student
quelle

Antworten:

55

Ermitteln Sie zunächst Ihren FOREIGN KEYEinschränkungsnamen auf folgende Weise:

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'My_Table';

Anschließend können Sie die benannte Einschränkung wie folgt entfernen:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Referenzen: 1 & 2 .

Wie von @SteffenWinkler in Kommentaren vorgeschlagen, können Sie Ihrer where-Klausel ein weiteres Prädikat hinzufügen, wenn sich in verschiedenen Schemas / Datenbanken mehr als eine Tabelle mit diesem Namen befindet:

AND TABLE_SCHEMA = 'My_Database';
Vérace
quelle
1
Vielen Dank für die Bearbeitung - ich antworte mit +1 auf Ihre Frage! :-)
Vérace
16
Auch SHOW CREATE TABLE My_Table;.
Rick James
2
@RickJames, das nur Einschränkungen für andere Tabellen anzeigt, für die My_Tablees gilt. Die Frage fragt nach Einschränkungen für My_Tableandere Tabellen.
ADTC
2
Nur für Leute, die nur einen Blick darauf werfen: Diese Anweisung listet alle Einschränkungen auf, die auf eine Tabelle mit dem angegebenen Namen auf dem gesamten Datenbankserver verweisen. Schränken Sie es auf die relevante Datenbank ein, indem SieAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler
3

Die obige Abfrage wurde bearbeitet. Der referenzierte Tabellenname wurde in Tabellenname als referenzierter Tabellenname geändert. Der Tabellenname ist die Tabelle, auf die verwiesen wird, und daher zeigt das Ergebnis der ursprünglichen Abfrage nicht die Fremdschlüssel auf Ihrer Tabelle an.

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  Table_name = 'case_qualitycontrolcase' and constraint_name = f
syed umar
quelle