错误代码1005,SQL状态HY000:无法创建表,错误编号:150。

3

我试图创建一张表格,但是当我的NetBeans出现第一个DB表格的错误时脚本就失败了。

这个问题该如何解决?

CREATE TABLE filmy
(
    Film_Id int NOT NULL,
    Nazwa varchar(250),
    Adres varchar(250),
    Data_Utworzenia date,
    Komentarz varchar(250),
    Gat_Id int,
    Sub_Id int,
    Aut_Id int,
    User_Id int,

    Primary Key (Film_Id),
    CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id),
    CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id),
    CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id),
    CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id)
)
5个回答

10

使用show innodb status命令,输出中间部分有一个“最后的外键错误”(last foreign key error)节。它将详细解释表格创建失败的原因。

通常情况下,这是由于引用的外键字段不存在(输错、错误的表格),或者字段类型不匹配。FK链接字段必须完全匹配定义。例如,char(1)字段不能链接到char(5)字段等等...

注意:在MySQL 5.5中,该命令为show engine innodb status(感谢kewpiedoll99)


谢谢!我发现问题出在定义引用其他表时,在“main”表中的引用之后。 - Malyo
1
哇!show innodb status 对于调试来说是无价之宝。非常感谢! - barclay
4
如果前者不可行,可以尝试使用show engine innodb status命令,因为在我的情况下前者无效;我正在使用5.5.11版本的MySQL Community Server。 - barclay

1

这是我的解决方案:

CREATE TABLE filmy 
( 
    Film_Id           int           NOT NULL, 
    Nazwa             varchar(250)      NULL, 
    Adres             varchar(250)      NULL, 
    Data_Utworzenia   date              DEFAULT '0000-00-00', 
    Komentarz         varchar(250)      NULL, 
    Gat_Id            int               NULL, 
    Sub_Id            int               NULL, 
    Aut_Id            int               NULL, 
    User_Id           int               NULL, 
 Primary Key (Film_Id, Gat_Id, Sub_Id, Aut_Id, User_Id )
) ENGINE=INNODB;

在创建gat、sub、aut和user之后才能执行外键约束,否则ide不知道这两个表格的存在,无法实现表格约束! 尝试:alter table filmy add constraint gatfilmy foreign key (gat_id) references gat(gat_id) on update restrict on delete restrict 你必须保持一致;要么将表格命名为gat,要么命名为gatunek,不能同时存在。如果你没有定义它们,cpu怎么知道哪个是gat或gatunek呢? 现在尝试使用其他约束,并记住你必须在修改表格之前先创建所有表格!

CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id), 
CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id), 
CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id), 
CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id) 

基本上是订单问题 :) - Malyo

0

你可能在与其他表关联时使用了这个表名(filmy),然后将其删除了。检查任何关联并删除您在其中使用此表名的所有地方,或更改您的表名,例如使用“filmy1”。

我更改了我的表名,然后它就可以工作了。

希望这能够解决问题。


0

代码150是外键错误。

其中一个引用的表或列不存在(可能在您的脚本中稍后存在),或者类型/长度/排序规则/字符集不匹配。逐个注释以查看哪个出错。

或在所有CREATE运行后运行单独的ALTER TABLE命令。


0

通常我在为没有索引的列添加外键时会遇到这个错误;我注意到您展示的 SQL 中没有任何关联列有索引。


最近的MySQL版本现在会为您创建所需的索引,这真是太好了。 - Marc B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接