MySQL: Jak sprawdzić klucze obce związane z tabelą

43

Jak wyświetlić klucze obce związane z tabelą w MySql?

Tło : Chciałem upuścić tabelę w MySql, która ma ograniczenie klucza obcego. Kiedy to robię, otrzymuję to:

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

Jak mogę upuścić klucze obce związane ze stołem, pozostawiając inne.

student
źródło

Odpowiedzi:

55

Po pierwsze, znajdź swoją FOREIGN KEYnazwę ograniczenia w następujący sposób:

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';

Następnie możesz usunąć nazwane ograniczenie w następujący sposób:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Odniesienia: 1 i 2 .

Jak sugeruje @SteffenWinkler w komentarzach, jeśli istnieje więcej niż jedna tabela o tej nazwie w różnych schematach / bazach danych, możesz dodać kolejny predykat do klauzuli where:

AND TABLE_SCHEMA = 'My_Database';
Vérace
źródło
1
Dzięki za edycję - odwzajemnię, dając +1 Twojemu pytaniu! :-)
Vérace
16
Również SHOW CREATE TABLE My_Table;.
Rick James,
2
@ RickJames, który pokazuje ograniczenia tylko dla innych tabel, które My_Tablema. Pytanie wymaga ograniczeń w stosunku do My_Tableinnych tabel.
ADTC
2
tylko dla osób, które tylko na to patrzą: ta instrukcja wyświetli wszystkie ograniczenia odnoszące się do tabeli o określonej nazwie na całym serwerze bazy danych. Ogranicz go do odpowiedniej bazy danych, dodającAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler
3

Edytowałem powyższe zapytanie. Zmieniono nazwę tabeli odniesienia na nazwę tabeli jako nazwę tabeli referencyjnej to tabela, do której następuje odwołanie, a zatem wynik oryginalnego zapytania nie pokaże kluczy obcych w tabeli.

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
źródło