INNODB Cascade Syntaxe / Logique problème
-
05-09-2019 - |
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.
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.