Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLException:Can';t创建表errno 150/外键_Java_Mysql_Foreign Keys - Fatal编程技术网

Java SQLException:Can';t创建表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

在做了一些研究之后,当表引擎类型不匹配或外键创建因任何原因失败时,似乎会出现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 (`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是的,那就可以了,不是吗?谢谢