Comment vérifier les clés étrangères associées à une table
-
26-09-2020 - |
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.
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;
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 >> ';