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