L'erreur est: Impossible de créer la table c.handsetstable
Comment puis-je trouver le problème?
J'ai créé une base de données et j'ai trouvé que mes autres tables y étaient créées mais une seule me donne cette erreur.
L'erreur est: Impossible de créer la table c.handsetstable
Comment puis-je trouver le problème?
J'ai créé une base de données et j'ai trouvé que mes autres tables y étaient créées mais une seule me donne cette erreur.
Il y a des conditions qui doivent être remplies pour une clé étrangère:
Vous devez utiliser le moteur de stockage InnoDB dans les deux tables. Les types de données doivent être identique dans les deux tables. Par exemple. VARCHAR (250) n'est pas identique à VARCHAR (255).
Il doit y avoir une contrainte PRIMARY KEY ou UNIQUE sur la (les) colonne (s) de la table parente. Votre clé étrangère doit déclarer la ou les mêmes colonnes, dans le même ordre, que celles de la contrainte PRIMARY KEY ou UNIQUE dans la table parente. C'est votre problème le plus probable.
Ainsi, par exemple, si cela est votre table parent:
CREATE TABLE PhoneModels (
make VARCHAR(255),
model VARCHAR(255),
PRIMARY KEY (make, model)
);
Ce qui suit serait faux, car la clé primaire a deux colonnes, mais chaque clé étrangère a une colonne.
CREATE TABLE Handsets
(
...
make VARCHAR(255),
model VARCHAR(255),
FOREIGN KEY (make) REFERENCES PhoneModels(make), // WRONG
FOREIGN KEY (model) REFERENCES PhoneModels(model) // WRONG
);
Cela ne fonctionne pas de cette façon; vous devriez avoir une clé étrangère qui référence les deux colonnes.
CREATE TABLE Handsets
(
...
make VARCHAR(255),
model VARCHAR(255),
FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model), // RIGHT
);
génial .... merci –
Etes-vous sûr que les clés étrangères existent? – Alec
oui .... cela signifie que customer_ssn devrait être présent dans les clients (ssn). –
si je supprime les 2 dernières clés étrangères .. alors il fonctionne.Mais il se réfère à ces champs. Comment puis-je faire une relation entre eux? –