我正在尝试创建一个表,但是一旦我的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)
)
答案 0 :(得分:10)
使用show innodb status
- 埋在输出中(中间)是“最后一个外键错误”部分。它将解释为什么表创建失败。
通常是由于参考FK字段不存在(拼写错误,错误的表格),或者存在字段类型不匹配。 FK链接的字段必须与定义完全匹配。 char(1)字段不能FK到char(5)字段等...
注意:在MySQL 5.5中,命令为show engine innodb status
(感谢kewpiedoll99)
答案 1 :(得分: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和amp;之后完成外键约束。用户或者ide不知道有两个表存在以使表约束成为现实! 尝试:alter table filmy add constraint gatfilmy foreign key(gat_id)引用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)
答案 2 :(得分:0)
代码150是外键错误。
其中一个引用的表或列不存在(但可能在您的脚本中稍后)或与类型/长度/整理/字符集不匹配。依次评论它们,看看哪一个。
或者在所有CREATE运行后运行单独的ALTER TABLE
命令
答案 3 :(得分:0)
当我尝试为没有索引的列添加外键时,我通常会收到该错误;我注意到所显示的SQL中没有任何关联列。
答案 4 :(得分:0)
你可以使用这个表名(filmy)与其他表的关系,然后你删除它。检查任何关系,并删除您使用此表名称的每个位置或更改您的表名称,例如使用“filmy1” 我更改了我的表名,然后就可以了。
我希望这项工作。