Question

J'ai un problème avec une base de données SQL que je crée. Je suis en train de passer au-dessus d'utiliser InnoDB mais je ne peux pas sembler obtenir la syntaxe (ou peut-être logique) correcte en cascade.

Voici un partie du code erroring. Il n'aime pas la ligne 40.

sortie d'erreur sous la forme cryptique habituel (du moins pour moi):

ERROR 1005 (HY000) at line 36: Can't create table './school/staff.frm' (errno: 150)

Edit:

Voici le tout fichier SQL que je suis en train de tuyau si cela aide.

Était-ce utile?

La solution

Les clés étrangères doivent être des indices. ( role.name )

Essayez ceci:

CREATE TABLE IF NOT EXISTS `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(30) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB;

Autres conseils

Vouliez-vous dire pour la contrainte de clé étrangère de la colonne « rôle » à utiliser le nom au lieu de l'ID? Il ressemble à la ligne suivante (ligne 43):

FOREIGN KEY (role) REFERENCES role(name)

devrait être:

FOREIGN KEY (role) REFERENCES role(id)

exécute sans erreur.

Vous pouvez également le type de données de colonne "staff.role" (ligne 40, rôle INT NOT NULL) pourrait être modifié à CHAR (30) NOT NULL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top