[英]SQLException: Can't create table errno 150/foreign key
在做了一些研究之后,似乎当表引擎类型不匹配时,或者外键创建因任何原因失败时,都会发生errno 150。 无论如何,我的Create脚本如下所示:
CREATE TABLE IF NOT EXISTS Users
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
fooType INT UNSIGNED NOT NULL DEFAULT 0,
...More columns, nothing special...
PRIMARY KEY (`id`),
CONSTRAINT Users_fooType_fk
FOREIGN KEY (fooType)
REFERENCES FooTypes (id)
ON DELETE CASCADE
) ENGINE = InnoDB#
CREATE TABLE IF NOT EXISTS FooTypes
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
...More columns, nothing special...
PRIMARY KEY (`id`)
) ENGINE = InnoDB#
所以,我的表引擎显式和隐式匹配(我使用MySQL 5.1.49,它默认使用InnoDB AFAIK)。
所以唯一的区别是Users.fooType有一个默认值。 那是问题吗? 如果是,我该如何设置默认值? 如果不是,任何人都会看到代码有什么问题吗? 对不起,我不得不对它进行一些模糊处理,但是你必须接受我的说法,即代码的混淆部分是正确的/不相关的。
你必须创建表FooTypes
之前Users
,因为它使用的参考 FooTypes
甚至在FooTypes
存在,意味着违反外键约束,也就是FooTypes(id)
必须提供之前存在的Users(fooType)
其参考。
REFERENCES FooTypes (id)
失败,因为找不到FooTypes
表,更不用说id
列了。
解:
只需在Users
之前创建FooTypes
表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.