我正在尝试创建一个表,但是当我的 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)
)
使用
show innodb status
- 隐藏在输出中(中间周围)的是“最后一个外键错误”部分。它将准确解释表创建失败的原因。
通常是由于引用的 FK 字段不存在(拼写错误、表格错误),或者字段类型不匹配。 FK 连接字段必须与定义完全匹配。 char(1) 字段不能 FK 到 char(5) 字段等...
注意:在 MySQL 5.5 中,执行此操作的命令是
show engine innodb status
(感谢 kewpiedoll99)
这是我的解决方案:
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)
代码 150 是外键错误。
引用的表或列之一不存在(但可能稍后在脚本中)或与类型/长度/排序规则/字符集不匹配。依次注释掉看看是哪一个。
或者在所有 CREATE 运行后运行单独的
ALTER TABLE
命令
当我尝试为没有索引的列添加外键时,我通常会收到该错误;我注意到所显示的 SQL 中没有任何关联列。
您可以在与其他表的关系中使用此表名称(薄膜),然后将其删除。检查任何关系并删除与此表名称一起使用的每个位置或更改表名称,例如使用“filmy1” 我更改了表名然后就成功了。
我希望这能成功。
引用另一个表时,引用的id必须是主键,在mysql或mariadb中如果要生成id则不要使用serial而是使用AUTO_INCRMENT