无法使用外键创建mysql表

问题描述:

我在尝试创建以下两个表时遇到了errno 150。无法使用外键创建mysql表

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 ; 

什么原因导致错误,我该如何解决?

+0

没有ü尝试从userstatusid定义删除“DEFAULT 2”? – palindrom 2009-11-12 09:50:56

+0

是的,我试过从userstatusid中删除默认的2。我也尝试将ENGINE = INNODB添加到第一个表userstatus。 – dannyp 2009-11-12 09:58:55

我把删除设置null,但该列已被定义为非空。我过分关注通常导致errno 150的类型。

也许你可以尝试在userstatusid上设置唯一键。 有时候这可能有帮助。

您可以尝试SHOW INNODB STATUS,它将显示最后一个InnoDB错误(例如,外键约束定义问题)。

(否则,您必须只是猜测基于错误数量和有限的信息,从该语句的错误提供,这是不理想的。)

+0

我认为你的意思是'SHOW ENGINE INNODB STATUS' – Benubird 2014-05-25 20:36:29

+0

谢谢你,自从我写出答案以来,这个命令已经改变了。 http://dev.mysql.com/doc/refman/5.0/en/show-innodb-status.html – 2014-05-26 09:41:49