我在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
我还尝试了另外两个概率,例如将它们NULL
,NULL DEFAULT CURRENT_TIMESTAMP
和NOT NULL
相同但没有似乎工作。
答案 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);