MySQL: Como verificar chaves estrangeiras relacionadas a uma tabela


43

Como ver chaves estrangeiras relacionadas a uma tabela no MySql?

Antecedentes : Queria soltar uma tabela no MySql com restrição de chave estrangeira. Quando faço isso, recebo o seguinte:

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

Como posso descartar chaves estrangeiras relacionadas à tabela deixando outras.

Respostas:


55

Em primeiro lugar, descubra o FOREIGN KEYnome da sua restrição desta maneira:

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

E então você pode remover a restrição nomeada da seguinte maneira:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Referências: 1 e 2 .

Conforme sugerido por @SteffenWinkler nos comentários, se houver mais de uma tabela com esse nome em esquemas / bancos de dados diferentes, você poderá adicionar um predicado adicional à sua cláusula where:

AND TABLE_SCHEMA = 'My_Database';

1
Obrigado pela edição - responderemos com +1 à sua pergunta! :-)
Vérace

16
Além disso SHOW CREATE TABLE My_Table;,.
Rick James

2
@ RickJames que mostra apenas restrições em outras tabelas que My_Tablepossuem. A pergunta pede restrições sobre as My_Tableoutras tabelas.
ADTC 26/10

2
apenas para pessoas que apenas olham para o seguinte: Essa instrução listará todas as restrições que referenciam uma tabela pelo nome especificado em todo o servidor de banco de dados. Limite-o ao banco de dados relevante adicionandoAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler

3

Editou a consulta acima. O nome da tabela referenciada alterada para Nome da tabela como nome da tabela referenciada é a tabela que está sendo referenciada e, portanto, o resultado da consulta original não mostra as chaves estrangeiras em sua tabela.

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.