SQLException:无法创建表errno 150 /外键

时间:2012-02-21 21:25:10

标签: java mysql foreign-keys

在做了一些研究之后,似乎当表引擎类型不匹配时,或者外键创建因任何原因而失败时,都会发生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有一个默认值。那是问题吗?如果是,我该如何设置默认值?如果不是,任何人都会看到代码有什么问题吗?对不起,我不得不对它进行一些模糊处理,但是你必须接受我的说法,即模糊的代码块是正确的/不相关的。

2 个答案:

答案 0 :(得分:2)

您必须在FooTypes之前创建表Users,因为它在FooTypes存在之前使用FooTypes引用,意味着违反外键约束,即FooTypes(id)必须在提供Users(fooType)引用之前存在。

答案 1 :(得分:1)

REFERENCES FooTypes (id)失败,因为找不到FooTypes个表格,更不用说id列。

<强>解决方案:
只需在FooTypes

之前创建Users