2011-11-09 140 views
3

我试图创建一个表,但脚本失败,只要我的netbeans错误数据库的第一个表。错误代码1005,SQL状态HY000:无法创建表errno:150

这怎么解决?

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) 
) 

回答

10

使用show innodb status - 埋在输出(围在中间)是“最后的外键错误”一节。它会解释为什么表创建失败。

通常这是由于参考FK字段不存在(错字,错误的表格)或存在字段类型不匹配。 FK链接的字段必须完全匹配定义。一个CHAR(1)字段不能FK'd为char(5)场等......

注:在MySQL 5.5中,这个命令是show engine innodb status(感谢kewpiedoll99)

+0

+1你提醒我关于类型错误匹配。 – gbn

+0

谢谢!我发现这个问题是在引用表中的主要''表中的引用之后定义的。 – Malyo

+1

哇! 'show innodb status'对于调试是无价的。非常感谢你! – barclay

0

代码150是外键错误。

其中一个引用的表或列不存在(但可能在以后的脚本中)或不匹配type/length/collat​​ion/charset。依次评论他们,看看哪一个。

或者单独运行ALTER TABLE命令后,所有的创造都运行

0

我当我尝试为没有索引的列添加外键时,通常会出现该错误;我注意到在你显示的SQL中没有关联的列。

+0

最近的mysql版本现在会为你创建所需的索引,谢天谢地。 –

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; 

外键约束创建的水道,子,AUT &用户否则IDE不知道有这两个表存在,使表约束成为现实后进行! 尝试:alter table filmy add constraint gatfilmy外键(gat_id)引用gat(gat_id)on update限制删除限制 必须保持一致;要么命名表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) 
+0

这是基本的秩序问题:) – Malyo

0

可以用这个表名(filmy)与其他表的关系,然后丢弃它。检查任何关系,并删除你使用这个表名或改变你的表名,例如使用“filmy1” 我改变了我的表名然后它工作。

我希望这项工作。

相关问题