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 у коментарях, якщо в різних схемах / базах даних існує більше однієї таблиці цього імені, ви можете додати ще один предикат до пункту де:

AND TABLE_SCHEMA = 'My_Database';

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.