2012-03-28 11 views
-1

私は主キー 'id'の外部キーリンクを持つ2つのテーブルとユーザーを持っています。 テーブルのinnoDBがタイプであることを確認しました。私はdelete- restrictとupdate -cascadeを持っています。挿入に失敗しました:子行を追加または更新できません:外部キー制約が失敗しました

この挿入クエリは、言語テーブルに挿入する(これはフォームが動的clickeventボタンを有するように追加される複数の行であってもよい)

if(empty($_SESSION['user_id'])) { // user not logged in; redirect to somewhere else } 

$sql_insert = "INSERT into `language` 
(`native`,`other`,`other_list`,`other_read`, `other_spokint` 
,`other_spokprod`,`other_writ` ) 
VALUES 
('$native','$other','$other_list','$other_read','$other_spokint','$other_spokprod', 
'$other_writ') "; 

mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error());  
} 

これは完全なエラーである:

Insertion Failed:Cannot add or update a child row: a foreign key constraint fails 
(`members`.`language`, CONSTRAINT `language_ibfk_1` FOREIGN KEY (`id`) 
REFERENCES `users` (`id`)) 

助けていただけたら幸いです!テーブル言語の

表構造:

CREATE TABLE IF NOT EXISTS `language` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`native` varchar(30) NOT NULL, 
`other` varchar(30) NOT NULL, 
`other_list` varchar(9) NOT NULL, 
`other_read` varchar(9) NOT NULL, 
`other_spokint` varchar(9) NOT NULL, 
`other_spokprod` varchar(9) NOT NULL, 
`other_writ` varchar(9) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 


RELATIONS FOR TABLE `language`: 
`id` 
`users` -> `id` 
+0

エラーメッセージがあなたのIDのFILDの外部キーに問題があると言います。 IDを持つユーザーがユーザーテーブルに存在することを確認しましたか? – F21

+1

言語テーブルの自動インクリメントフィールド "id"は、ユーザーテーブルの外部キー "id"フィールドにどのようにマップできますか? – neeraj

+0

はい私はテーブルをリンクする方法とプライマリキーに使用するものに苦労しています。最高の解決策は何でしょうか? – user1296762

答えて

0

あなたは、このような構造を使用する必要があります。

create table users (
    id int not null auto_increment, 
    <additional fields>, 

    primary key (id) 
) ENGINE=InnoDB; 


create table language(
    id int not null auto_increment, 
    user_id int not null, 
    <additional fields>, 

    primary key (id), 
    foreign key (user_id) references users(id) on delete restrict on update cascade 
) ENGINE=InnoDB; 
+0

私はこれを行ってまだエラーが発生しています: 'Insertion Failed:子行を追加または更新できません:外部キー制約が失敗しました( 'members'.'language'、CONSTRAINT' language_ibfk_1')FOREIGN KEY( 'user_id')REFERENCES'ユーザー '( 'id')ON UPDATE CASCADE)' – user1296762

+0

あなたの挿入物にuser_idを提供していないので、そうではありませんか?外部キーが 'not null'と定義されている場合、それを挿入物に含める必要があります –

+0

しかし、ユーザーIDは挿入ごとに異なりますか? – user1296762

関連する問題