繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM