MySQL: как проверить внешние ключи, связанные с таблицей

43

Как увидеть внешние ключи, связанные с таблицей в MySql?

Фон : я хотел удалить таблицу в MySql, которая имеет ограничение внешнего ключа. Когда я делаю это, я получаю это:

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

Как можно скинуть внешние ключи, связанные со столом, оставив другие.

ученик
источник

Ответы:

55

Во-первых, узнайте FOREIGN KEYимя вашего ограничения следующим образом:

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

И тогда вы можете удалить именованное ограничение следующим образом:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Рекомендации: 1 и 2 .

Как предложено @SteffenWinkler в комментариях, если в разных схемах / базах данных содержится более одной таблицы с таким именем, вы можете добавить еще один предикат к предложению where:

AND TABLE_SCHEMA = 'My_Database';
Verace
источник
1
Спасибо за изменения - я отвечу взаимностью, добавив +1 к вашему вопросу! :-)
Vérace
16
Также SHOW CREATE TABLE My_Table;.
Рик Джеймс
2
@RickJames, который показывает ограничения только на другие таблицы, которые My_Tableимеют. Вопрос требует ограничений, My_Tableкоторые есть у других таблиц.
ADTC
2
только для тех, кто только смотрит на это: в этом операторе будут перечислены все ограничения, ссылающиеся на таблицу с указанным именем на всем сервере базы данных. Ограничьте его соответствующей базой данных, добавивAND TABLE_SCHEMA = 'My_Database';
Штеффен Винклер
3

Отредактировал запрос выше. Изменилось имя ссылочной таблицы на имя таблицы, так как ссылка на имя таблицы представляет собой таблицу, на которую ссылаются, и, следовательно, результат исходного запроса не покажет вам внешние ключи вашей таблицы.

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
Сайед Умар
источник