2017-02-19 11 views
1

私は2つのテーブルをmysqlで作成しました。そして、それらの間に外部キー用の新しい制約を追加しています。その後、は外部キーを作成できません

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_TIMESTAMP、同じものをNOT NULLと同じように作成しても問題ありません。

+0

コメントテーブル内のコンテンツがあります:そして、あなたは関係を作ることができるのでしょうか? – jophab

+0

[this](http://stackoverflow.com/questions/8434518/mysql-foreign-key-constraint-is-incorrectly-formed-error)答え:両方の列の型と長さが同じである必要があります。 – Hossam

+0

joepap彼らは何も持っていない、私はちょうどそれらを作成した – Amr

答えて

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

+0

私の命を救った! – Amr

+0

@Amr、喜んで:) – Mojtaba

関連する問題