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

5 回答 5

10

使用show innodb status- 隐藏在输出中(在中间附近)是“最后一个外键错误”部分。它将准确解释为什么表创建失败。

通常是由于引用 FK 字段不存在(错字、错误的表),或者存在字段类型不匹配。FK 链接字段必须与定义完全匹配。char(1) 字段不能 FK'd 到 char(5) 字段等...

注意:在 MySQL 5.5 中,执行此操作的命令是show engine innodb status(感谢 kewpiedoll99)

于 2011-11-09T19:26:34.560 回答
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 和用户后完成,否则 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) 
于 2011-12-29T00:28:57.663 回答
0

代码 150 是外键错误。

引用的表或列之一不存在(可能稍后在您的脚本中)或与类型/长度/排序规则/字符集不匹配。依次评论出来,看看是哪一个。

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

于 2011-11-09T19:21:52.880 回答
0

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

于 2011-11-09T19:34:28.037 回答
0

您可以在与其他表的关系中使用此表名(电影),然后将其删除。检查任何关系并删除使用此表名的所有位置或更改表名,例如使用“filmy1”我更改了我的表名然后它起作用了。

我希望这项工作。

于 2013-09-06T17:49:38.117 回答