无法创建外键mysql

时间:2017-02-19 13:40:47

标签: mysql sql

我在mysql创建了2个表,然后我在它们之间为外键添加了一个新约束,这里是表。

create TABLE post
(
   post_id NUMERIC (5) NOT NULL ,
   post_username varchar (30) NOT NULL ,
   post_category_name VARCHAR (30) NOT NULL ,
   post_date TIMESTAMP ,
   post_reporting numeric (3) ,
   post_text varchar(2000) ,
   post_photo varchar(200)
);
alter TABLE post add CONSTRAINT po_pk PRIMARY KEY (post_id , post_username , post_date) ;

/*comment*/
create table comment
(
  comment_username varchar(30) NOT NULL ,
  comment_post_id NUMERIC(5) NOT NULL ,
  comment_post_username VARCHAR (30) NOT NULL ,
  comment_post_date TIMESTAMP,
  comment_date TIMESTAMP ,
  comment_text varchar(2000) ,
  comment_photo varchar(200)
);
alter table comment add CONSTRAINT co_pk PRIMARY KEY (comment_username,comment_date,comment_post_date,comment_post_id,comment_post_username);

然后,当我为外键添加新约束时,如下所示

ALTER TABLE comment ADD CONSTRAINT com_ps_un_fk FOREIGN KEY (comment_post_date)
REFERENCES post(post_date);

我收到(errno: 150 "Foreign key constraint is incorrectly formed") ,两个属性都具有相同的数据类型TIMESTAMP我还尝试了另外两个概率,例如将它们NULLNULL DEFAULT CURRENT_TIMESTAMPNOT NULL相同但没有似乎工作。

1 个答案:

答案 0 :(得分:0)

post_date是主键的一部分。因此,它不能独立地用作密钥。

您必须在其上设置index键。那么,你就可以建立关系:

ALTER TABLE `post` ADD INDEX(`post_date`);

ALTER TABLE comment ADD CONSTRAINT com_ps_un_fk FOREIGN KEY (comment_post_date)
REFERENCES post(post_date);

Fiddle