我正在尝试使用以下查询在两个表之间创建关系:
create table card
(id int not null auto_increment,
post_id bigint(20) unsigned not null,
primary key(id));
create table user_comment
(id int not null auto_increment,
comment_author longtext,
comment_post_id bigint(20) unsigned not null,
primary key (id),
foreign key (comment_post_id) references card(post_id));
但是它给了我以下错误消息:
第9行的错误1005(HY000):无法创建表'test.user_comment' (错误:150)
如果我执行显示innodb状态的命令:
show engine innodb status;
显示此消息:
最新外国关键错误 表test / user_comment的外键约束出错:外键 (comment_post_id)引用卡(post_id)):找不到索引 引用的列显示为第一个引用的表 表中的列或列类型以及引用的表中没有 匹配约束。
但我仍然无法弄清楚如何解决问题。
有什么想法吗?
答案 0 :(得分:1)
来自docs:
MySQL需要外键和引用键上的索引,以便外键检查可以快速而不需要表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。如果引用表不存在,则会自动在引用表上创建此索引。如果您创建另一个可用于强制执行外键约束的索引,则可以稍后以静默方式删除此索引。如果给出
index_name
,则如前所述使用{。}}。
在card (post_id)
上创建索引。
答案 1 :(得分:0)
在创建表格之前,只需使用此命令一次:
SET FOREIGN_KEY_CHECKS=0;