无法使用外键创建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 ;
什么原因导致错误,我该如何解决?
我把删除设置null,但该列已被定义为非空。我过分关注通常导致errno 150的类型。
也许你可以尝试在userstatusid上设置唯一键。 有时候这可能有帮助。
您可以尝试SHOW INNODB STATUS
,它将显示最后一个InnoDB错误(例如,外键约束定义问题)。
(否则,您必须只是猜测基于错误数量和有限的信息,从该语句的错误提供,这是不理想的。)
我认为你的意思是'SHOW ENGINE INNODB STATUS' – Benubird 2014-05-25 20:36:29
谢谢你,自从我写出答案以来,这个命令已经改变了。 http://dev.mysql.com/doc/refman/5.0/en/show-innodb-status.html – 2014-05-26 09:41:49
没有ü尝试从userstatusid定义删除“DEFAULT 2”? – palindrom 2009-11-12 09:50:56
是的,我试过从userstatusid中删除默认的2。我也尝试将ENGINE = INNODB添加到第一个表userstatus。 – dannyp 2009-11-12 09:58:55