2009-11-12 5 views
1

Je reçois errno 150 lorsque j'essaie de créer les deux tables suivantes.Impossible de créer une table mysql avec une clé étrangère

CREATE TABLE `mydatabase`.`userstatus`( 
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `name` VARCHAR(50) NOT NULL , 
    `description` VARCHAR(255) , 
    PRIMARY KEY (`id`) 
); 



CREATE TABLE `mydatabase`.users( 
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `email` VARCHAR(200) NOT NULL , 
    `username` VARCHAR(20) NOT NULL DEFAULT 'Unknown' , 
    `userstatusid` INT UNSIGNED NOT NULL DEFAULT 2 , 
    `datemodified` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `datecreated` DATETIME DEFAULT 0 NOT NULL , 
    PRIMARY KEY (`id`), 
    UNIQUE (username), 
    UNIQUE (email), 
    INDEX userstatusid_index (userstatusid), 
    CONSTRAINT fk_users_userstatus FOREIGN KEY (userstatusid) REFERENCES userstatus(id) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE 

) ENGINE=INNODB ROW_FORMAT=DEFAULT ; 

Quelle est l'origine de l'erreur et comment puis-je résoudre ce problème?

+0

avez-essayez de supprimer « DEFAULT 2 » de la définition de userstatusid? – palindrom

+0

Oui, j'ai essayé de supprimer le 2 par défaut de userstatusid. J'ai également essayé d'ajouter ENGINE = INNODB à la première table userstatus. – dannyp

Répondre

2

J'ai mis delete set null mais la colonne a été définie comme non null. Je me concentrais trop sur les types qui cause habituellement l'errno 150.

0

Peut-être que vous pourriez essayer de définir une clé unique sur userstatusid. Parfois, cela peut aider.

0

Vous pouvez essayer SHOW INNODB STATUS qui affichera la dernière erreur InnoDB (par exemple, des problèmes de définition de contrainte de clé étrangère).

(Sinon, vous devez simplement deviner en fonction du nombre d'erreurs et d'informations limitées qui l'erreur de la déclaration fournit, ce qui est idéal.)

+0

Je pense que vous voulez dire 'SHOW ENGINE INNODB STATUS' – Benubird

+0

Merci, cette commande a changé depuis que j'ai écrit la réponse. http://dev.mysql.com/doc/refman/5.0/en/show-innodb-status.html –

Questions connexes