Java SQLException:Can';t创建表errno 150/外键
在做了一些研究之后,当表引擎类型不匹配或外键创建因任何原因失败时,似乎会出现errno 150。无论如何,我的创建脚本如下所示:Java SQLException:Can';t创建表errno 150/外键,java,mysql,foreign-keys,Java,Mysql,Foreign Keys,在做了一些研究之后,当表引擎类型不匹配或外键创建因任何原因失败时,似乎会出现errno 150。无论如何,我的创建脚本如下所示: 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 (`i
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
,因为它使用FooTypes
的引用,甚至在FooTypes
存在之前,表示违反外键约束,即在提供用户(fooType)
其引用之前必须存在FooTypes(id)
。引用FooTypes(id)
失败,因为未找到FooTypes
表,更不用说id
列了
解决方案:只需在
用户之前创建FooTypes
表
facepalm是的,那就可以了,不是吗?谢谢