Question

Comment faire pour voir les clés étrangères associées à une table dans MySql?

Arrière-plan :J'ai voulu supprimer une table dans MySql qui a une contrainte de clé étrangère.Quand je le fais j'obtiens ceci:

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

Comment puis-je déposer les clés étrangères liées à la table de laisser à d'autres.

Était-ce utile?

La solution

Tout d'abord, trouver votre FOREIGN KEY nom de la contrainte de cette façon:

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

Vous pouvez également ajouter (à la WHERE clause) si vous avez plus d'une table appelée My_Table dans les différents schémas.

AND TABLE_SCHEMA = 'My_Database';

Et ensuite, vous pouvez supprimer la contrainte nommée de la façon suivante:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Références: 1 & 2.

Autres conseils

Editied la Requête ci-dessus.Changé Référencé nom de la Table Nom Table Référencés nom de la Table est la table qui est d'être référencé et donc le résultat de la requête d'origine habitude vous montrer les clés étrangères sur votre table.

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

Dans MySql 5.7.Vous pouvez trouver le tableau des relations et des relations règles.

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;

Vous pouvez directement l'exécution de cette requête de sortie de supprimer la contrainte de la table référencée.



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


Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top