无法使用外键创建mysql表

时间:2009-11-12 09:45:15

标签: mysql

当我尝试创建以下两个表时,我得到了错误150。

 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 ;

导致错误的原因是什么?如何解决?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

(否则你必须根据错误编号和有限信息猜测,该错误来自语句提供的错误,这是不理想的。)