Вопрос

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

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

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

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

Это было полезно?

Решение

Во-первых, выясните свой 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';

Вы также можете добавить (к WHERE предложение), если у вас вызвано более одной таблицы My_Table в разных схемах.

AND TABLE_SCHEMA = 'My_Database';

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

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Ссылки: 1 & 2.

Другие советы

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

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
.

в mysql 5.7.Вы можете найти табличные отношения и правила отношений.

SELECT
  DISTINCT a.TABLE_NAME,
  a.CONSTRAINT_NAME,
  b.DELETE_RULE,
  b.UPDATE_RULE,
  a.REFERENCED_TABLE_NAME,
  a.COLUMN_NAME,
  a.REFERENCED_COLUMN_NAME,
  a.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b USING (CONSTRAINT_NAME)
WHERE
    a.TABLE_SCHEMA = "DATABASE_NAME" AND
    a.REFERENCED_TABLE_NAME = 'TABLE_NAME'
ORDER BY a.TABLE_NAME ASC;
.

Вы можете напрямую выполнить этот вывод запроса, чтобы отбросить ограничение ссылочной таблицы.



select concat('ALTER TABLE ' ,CONSTRAINT_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
from  information_schema.REFERENTIAL_CONSTRAINTS  
where REFERENCED_TABLE_NAME='<<table to be dropped >> ';


.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top