2017-01-14 33 views
1

を失敗した私は、このテーブルがあります。のMySQL:エラーコード:1452は、子行を追加または更新できません:外部キー制約が

CREATE TABLE comments(
    comment_id int(11) NOT NULL auto_increment, 
    user_id int(11) NOT NULL, 
    product_id int(11) NOT NULL, 
    comment_text varchar(1000) COLLATE utf8_czech_ci NOT NULL, 
    uploaded datetime NOT NULL, 
    primary key(comment_id), 
    constraint fk_user_comments foreign key(user_id) references user(user_id) ON UPDATE CASCADE ON DELETE CASCADE, 
    constraint fk_product_comments foreign key(product_id) references product(product_id) ON UPDATE CASCADE ON DELETE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; 

を、私は、このテーブルにデータを挿入しようとしています。

INSERT INTO comments(user_id,product_id,comment_text,uploaded) VALUES(1,'brbr',1,Now()); 

しかし、私はこのエラーを取得しておく何らかの理由:ID 1の

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`project`.`comments`, CONSTRAINT `fk_product_comments` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`) ON DELETE CASCADE ON UPDATE CASCADE) 

ユーザーが存在し、IDが1の製品は今私が問題を引き起こしていただきまし見当がつかないので存在します。

+0

プライマリキーのcomment_idに値を挿入していません。それは間違いです。最初に修正してください。また、製品とユーザーのテーブルから構造とデータを共有できますか?そしてproduct_idは文字列値をintとして宣言していますが、これは間違っています。だからこそあなたの質問は失敗します。 – Venkat

+0

ああ...私。今私は馬鹿だと感じる:D。ありがとう。 – NoSkilz

+1

@Venkat:_ "主キーcomment_idの値を挿入していません。それは間違っています。" 'auto_increment'フィールドです。全体のポイントは、それを自分で設定することではありません。 –

答えて

2

あなたはあなたの列リストの順序が乱雑になっています。 product_id'brbr'(MySQLは0と扱われます)とコメントテキスト1(MySQLが'1'に変換する)を挿入しようとしています。値(またはその逆)を一致させるために列リストを並べ替える

は、それを解決する必要があります

INSERT INTO comments 
(user_id, product_id, comment_text, uploaded)     
VALUES (1, 1, 'brbr', NOW()); 
-- Here ---^ 
1

これは、列順序に従って値を追加しないためです。

これは正しいクエリです。

INSERT INTO comments(user_id,product_id,comment_text,uploaded) VALUES(1,1,'brbr',Now()) 
+0

ダンプするだけではなく、解答を説明してください。 –

+0

申し訳ありません。私はここで新しいです。 Otbitの@ Lightness Races –

+0

"1年間、2ヶ月間のメンバー" :) –

0

私は私によって設計されていなかったスキーマを扱ったように私は今日、同じ問題に会いました。私はテーブルと人間関係(FK)を追加し、物事はKaBoomに行きました!

調査の結果、他のバディがMyIsam Engineを使用していて、InnoDBを使用していたことがわかりました。

テーブルをMyIsamからInnoDBに変更すると、問題が解決しました。

関連する問題