0
votes

Code d'erreur MySQL 1215: "Impossible d'ajouter une contrainte de clé étrangère"

Je continue à obtenir cette erreur lorsque vous essayez de créer une table avec SQL.

J'ai ces deux tables:

J'utilise phpmyadmin et cela ne me permettra pas d'utiliser m_id comme une clé étrangère qui fait référence à la clé primaire de la table E_ID.

Quelqu'un capable de voir ce qui ne va pas avec mon code?

merci!


3 commentaires

Les touches doivent être identiques sur les deux tables. Les deux tables sont-elles le même type - InnoDB? Vérifiez également que les colonnes int sont la même longueur


Vous vous référez à la même table. 'Clé étrangère (Super_id) Références Employé (E_ID)' .. Cela devrait être une autre table (étrangère)


Vous avez une clé étrangère dans un employé qui références département et une clé étrangère dans le département qui fait référence aux employés - cela ne fonctionnera pas car la table référencée doit exister avant de créer la table de références. Si vous voulez vraiment faire cela, créez les tables sans la FKS et utilisez des déclarations alter à ajouter les FKS


3 Réponses :


2
votes

Les définitions de clé étrangère doivent correspondre exactement aux colonnes de clé primaire auxquelles ils se réfèrent. Dans ce cas, vous avez défini département.m_id à une colonne INTEGER NULLABLE, tandis que Employee.e_id est entier non nullable. Essayez de faire m_id non nullable: xxx


1 commentaires

Ce n'est pas un problème et une conception valide de citation. Pourquoi sinon aurions-nous sur DELETE SET NULL ?



0
votes

Votre code a plusieurs erreurs:

  • varchar () La longueur est trop longue.
  • Vous avez une référence en avant pour une contrainte de clé étrangère.
  • Définir par défaut ne fonctionne pas vraiment.

    Vous voulez quelque chose comme ceci: xxx

    J'ai aussi changé de quelques autres choses:

    • Les noms de table sont pluriels.
    • Les clés primaires sont la forme singulière suivie de "_ID".
    • Les clés étrangères et les clés primaires ont le même nom.
    • La clé principale est la première colonne du tableau.

      ici est un dB <> violon montrant que cette fonctionne.


0 commentaires

0
votes

Je ne vais pas remettre en question votre conception, bien que cela semble problématique.

Cependant, vous ne pouvez pas faire référence à une table qui n'existe pas encore ( déparence des références (d_id) code>). Vous devez soit supprimer les contraintes de clé étrangère des instructions créées et les ajouter ensuite dans les relevés de table Alter. P>

Exemple: P>

SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE EMPLOYEE (...);

CREATE TABLE Department (...);

SET FOREIGN_KEY_CHECKS = 1;


0 commentaires