web-dev-qa-db-fra.com

Comment vérifier les clés étrangères liées à une table

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

Background: Je voulais supprimer une table dans MySql qui a une contrainte de clé étrangère. Quand je le fais, je reçois ceci:

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

Comment puis-je supprimer des clés étrangères liées à la table laissant d'autres.

48
xameeramir

Tout d'abord, découvrez 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';

Et puis vous pouvez supprimer la contrainte nommée de la manière suivante:

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

Références: 1 & 2 .

Comme suggéré par @SteffenWinkler dans commentaires , s'il existe plusieurs tables de ce nom dans différents schémas/bases de données, vous pouvez ajouter un prédicat supplémentaire à votre clause where:

AND TABLE_SCHEMA = 'My_Database';
66
Vérace

Modifié la requête ci-dessus. Le nom de la table référencée a été remplacé par le nom de la table car le nom de la table référencée est la table qui est référencée et, par conséquent, le résultat de la requête d'origine ne vous montrera pas les clés étrangères de 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
2
syed umar

Dans MySql 5.7. Vous pouvez trouver des relations de table et des règles de relations.

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;
1
M. Hamza Rajput