2009-02-17 8 views
-1

J'ai un problème avec une base de données SQL que je suis en train de créer. J'essaie de passer à INNODB mais je n'arrive pas à obtenir la syntaxe (ou éventuellement la logique) correcte pour la cascade. Il s'agit d'un part of the code erroring. Il n'aime pas la ligne 40.Problème de syntaxe/logique en cascade INNODB

sortie d'erreur sous la forme cryptique (pour moi au moins) d'habitude:

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

Edit:

Voici le whole SQL file que je suis en train de tuyau si ce aide.

Répondre

0

Les clés étrangères doivent être des index. (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; 
+0

J'avais déjà essayé d'ajouter une ligne de nom INDEX, ce qui ne fonctionnait pas. Et il ne semble pas non plus votre suggestion :( Toujours sorties ceci: ERROR 1005 (HY000) à la ligne 37: Impossible de créer une table './school/staff.frm' (errno: 150) –

0

Vouliez-vous dire pour la contrainte de clé étrangère de la colonne « rôle » d'être en utilisant 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) 

Cette exécute sans erreurs.

Alternativement, le type de données de la colonne "staff.role" (ligne 40, rôle INT NOT NULL) pourrait être changé en CHAR (30) NOT NULL.