Pergunta

Como ver chaves estrangeiras relacionadas a uma tabela no MySql?

Fundo :Eu queria eliminar uma tabela no MySql que possui uma restrição de chave estrangeira.Quando faço isso, recebo isto:

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

Como posso descartar chaves estrangeiras relacionadas à tabela deixando outras.

Foi útil?

Solução

Em primeiro lugar, descubra o seu FOREIGN KEY nome da restrição desta forma:

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

Você também pode adicionar (ao WHERE cláusula) se você tiver mais de uma tabela chamada My_Table em esquemas diferentes.

AND TABLE_SCHEMA = 'My_Database';

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 & 2.

Outras dicas

Editei a consulta acima.Nome da tabela referenciada alterado para Nome da tabela como nome da tabela referenciada é a tabela que está sendo referenciada e, portanto, o resultado da consulta original não mostrará 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

No MySQL 5.7.Você pode encontrar relações de tabela e regras de relações.

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;

Você pode executar diretamente a saída desta consulta para eliminar a restrição da tabela referenciada.



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


Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top