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

问题描述 投票:0回答:6

我正在尝试创建一个表,但是当我的 netbeans 出错数据库的第一个表时,脚本就会失败。

如何解决这个问题?

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)
)
mysql database mysql-error-1005
6个回答
10
投票

使用

show innodb status
- 隐藏在输出中(中间周围)的是“最后一个外键错误”部分。它将准确解释表创建失败的原因。

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

注意:在 MySQL 5.5 中,执行此操作的命令是

show engine innodb status
(感谢 kewpiedoll99)


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 不知道是否存在这两个表来使表约束成为现实! 尝试: 更改表 filmy 添加约束 gatfilmy 外键 (gat_id) 引用 gat(gat_id) 更新限制 删除限制 你必须保持一致;将表命名为 gat 或 gatunek,不能同时命名。如果你没有定义 gat 和 gatunek,CPU 如何知道它们是哪一个? 现在尝试使用其余约束,并记住您必须先创建所有表,然后才能更改它们!

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
投票

代码 150 是外键错误。

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

或者在所有 CREATE 运行后运行单独的

ALTER TABLE
命令


0
投票

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


0
投票

您可以在与其他表的关系中使用此表名称(薄膜),然后将其删除。检查任何关系并删除与此表名称一起使用的每个位置或更改表名称,例如使用“filmy1” 我更改了表名然后就成功了。

我希望这能成功。


0
投票

引用另一个表时,引用的id必须是主键,在mysql或mariadb中如果要生成id则不要使用serial而是使用AUTO_INCRMENT

© www.soinside.com 2019 - 2024. All rights reserved.