Question

L'erreur est: Impossible de créer c.handsets de table

Comment puis-je trouver le problème?

J'ai fait une base de données et je trouve que mes autres tables sont créées mais une seule me donne cette erreur.

Était-ce utile?

La solution

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 tableaux.

  • Les types de données doivent être identiques dans les deux tableaux. Par exemple. VARCHAR (250) ne soit pas identique à VARCHAR (255).

  • Il doit être une clé primaire ou UNIQUE sur la colonne (s) dans la table parent.

  • Votre clé étrangère doit déclarer la même colonne (s), dans le même ordre, que ceux de la clé primaire ou UNIQUE dans la table parent. Ceci 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 erroné 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
);

Il 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
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top