创建表时出现外键错误(错误号150)

时间:2014-07-09 20:29:54

标签: mysql sql database relational-database foreign-key-relationship

我正在尝试使用以下查询在两个表之间创建关系:

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)):找不到索引   引用的列显示为第一个引用的表   表中的列或列类型以及引用的表中没有   匹配约束。

但我仍然无法弄清楚如何解决问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

来自docs

  

MySQL需要外键和引用键上的索引,以便外键检查可以快速而不需要表扫描。在引用表中,必须有一个索引,其中外键列以相同的顺序列为第一列。如果引用表不存在,则会自动在引用表上创建此索引。如果您创建另一个可用于强制执行外键约束的索引,则可以稍后以静默方式删除此索引。如果给出index_name,则如前所述使用{。}}。

card (post_id)上创建索引。

答案 1 :(得分:0)

在创建表格之前,只需使用此命令一次:

SET FOREIGN_KEY_CHECKS=0;