2012-01-13 23 views
2

次のデータベースがあります。以下に示すクエリを実行しようとすると、Cannot add or update a child rowというエラーが表示されます。なぜこのエラーが出るのか分かりません。エラー1452(23000):子行を追加または更新できません。

入力中のobject_id(327)がデータベースに存在します。私も他のobject_idでこれを試してみました。同じエラーが表示されます。ここで何が起きてるの?ここで

like_objects 
+-------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-------------+---------+------+-----+---------+----------------+ 
| object_id | int(11) | NO | MUL | NULL |    | 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| user_id  | int(11) | NO | MUL | NULL |    | 
+-------------+---------+------+-----+---------+----------------+ 

objects 
+--------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+--------------+------+-----+---------+----------------+ 
| object_name | longtext  | NO |  | NULL |    | 
| object_desc | longtext  | NO |  | NULL |    | 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| likes  | int(11)  | NO |  | NULL |    | 
+--------------+--------------+------+-----+---------+----------------+ 

は、クエリと、それが生成するエラーです:私は別のテーブルに対して同様のlikeロジックを使用していると、それは絶対に正常に動作しているので

insert into like_objects (object_id,user_id) values (327,1) 

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails 
(`test_db`.`like_objects`, CONSTRAINT `object_id_refs_id_57f96810` FOREIGN KEY (`object_id`) 
REFERENCES `objects` (`id`)) 

は、これは非常に奇妙です。

重要私はmysqldumpからobjectsテーブルを取得しました。最初にobjectsテーブルがPhpMyAdminから作成され、like_objectsテーブルがdjango models

+1

正当性チェックの結果を追加してください(つまり、id = 327のオブジェクトから選択してください)。投稿に追加してください。 –

+1

また、両方のテーブルに 'create table'ステートメントを追加すると役立ちます。 –

+0

@MattFenwick:object_descは長いテキストなので、このクエリの結果は非常に長くなります。私はすべてをコピーすることはできませんが、期待どおりに正しいタプルを取得しています。 'id'はテーブルに存在します。 – Sachin

答えて

3

によって作成されました。問題の原因がわかりました。私は自分の質問に投稿したように、テーブルはphpmyadminを使用して作成され、django projectの一部である私のデータベースにダンプされています。

最初に作成されたテーブルのストレージエンジンはMyISAMでしたが、djangoによって作成されたテーブルにはストレージエンジンinnodbがありました。その結果、objectsテーブルを参照しているlike_objectsテーブルにオブジェクトを挿入しようとすると、そのストレージタイプとの互換性がなくなりました。

このlinkは、私のテーブルのストレージエンジンが何であるかを知るのに役立ちました。その後、belwoコマンドを使用してMyISAMエンジンをinnodbに変更しました。

関連する問題