Contraintes des clés étrangères MySQL : éviter les erreurs Errno 150
Lors de la création d'une table dans MySQL avec des clés étrangères faisant référence à d'autres tables, vous pouvez rencontrer un numéro d'erreur : erreur 150. Pour résoudre ce problème, il est crucial de respecter les directives suivantes :
-
Assurer l'ordre des tables : Définissez la table parent contenant la clé primaire avant de créer la table enfant avec la clé étrangère référence.
-
Activer la prise en charge des clés étrangères : Les tables parent et enfant doivent prendre en charge les contraintes de clé étrangère, généralement en utilisant le stockage InnoDB. moteur.
-
Clé de colonne la plus à gauche : Les colonnes référencées dans la table parent doivent être les colonnes les plus à gauche d'une clé, idéalement une CLÉ PRIMAIRE ou une CLÉ UNIQUE.
-
Ordre des clés primaires correspondantes : La définition FK doit s'aligner sur la définition PK en termes d'ordre des colonnes et de données. types.
-
Alignement approprié des données : Les colonnes PK de la table parent et les colonnes FK de la table enfant doivent correspondre en termes de type de données et de classement.
-
Compatibilité des données existantes : Si la table enfant contient des données, assurez-vous que chaque valeur de colonne FK correspond à une valeur correspondante dans la table parent PK colonnes.
-
Évitez les tables temporaires ou partitionnées : Les contraintes de clé étrangère ne peuvent pas être définies sur les tables TEMPORAIRES ou PARTITIONNÉES.
-
Colonnes nullables : Si un ON DELETE SET NULL est utilisée, les colonnes FK doivent être nullable.
-
Noms de contraintes uniques : Les contraintes de clé étrangère doivent avoir des noms uniques dans le schéma pour éviter les conflits.
-
Clés étrangères dépendantes : Si un un FK mal formé existe dans une autre table faisant référence au même champ dans la table parent, assurez-vous de la cohérence avant de créer le nouveau FK. Utilisez la requête suivante pour identifier les FK problématiques :
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE CONSTRAINT_SCHEMA = 'your_schema_name'
AND CONSTRAINT_NAME <> 'PRIMARY' AND REFERENCED_COLUMN_NAME IS NOT NULL;
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!