Je continue à obtenir cette erreur lorsque vous essayez de créer une table avec SQL. P>
J'ai ces deux tables: p>
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. P>
Quelqu'un capable de voir ce qui ne va pas avec mon code? P>
merci! p>
3 Réponses :
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 code> à une colonne INTEGER NULLABLE, tandis que Employee.e_id code> est entier non nullable. Essayez de faire m_id code> non nullable:
Ce n'est pas un problème et une conception valide de citation. Pourquoi sinon aurions-nous sur DELETE SET NULL code>?
Votre code a plusieurs erreurs:
varchar () code> La longueur est trop longue. li>
- Vous avez une référence en avant pour une contrainte de clé étrangère. LI>
-
Définir par défaut code> ne fonctionne pas vraiment. LI>
ul> Vous voulez quelque chose comme ceci: p> xxx pré> J'ai aussi changé de quelques autres choses: p>
- Les noms de table sont pluriels. LI>
- Les clés primaires sont la forme singulière suivie de "_ID". Li>
- Les clés étrangères et les clés primaires ont le même nom. LI>
- La clé principale est la première colonne du tableau. LI>
ul>
ici est un dB <> violon montrant que cette fonctionne. p> p>
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 ( Exemple: P> 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> SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE EMPLOYEE (...);
CREATE TABLE Department (...);
SET FOREIGN_KEY_CHECKS = 1;
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 code> sont la même longueurVous 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