2016-03-29 13 views
1

このエラーメッセージでは、制約に合格しない特定の行をmysqlimportが出力する方法はありますか?デバッグにはいいですね。そうでなければ、どの列にこの問題があるのか​​分かりません。MySQLで制約を追加すると失敗する行を見つけよう

mysqlimport: Error: 1452, Cannot add or update a child row: a foreign key constraint fails (`bwordDS`.`Category_Term`, CONSTRAINT `FK_qn1crq26sr0hqm5q2p7nfvdu1` FOREIGN KEY (`categories_id`) REFERENCES `Category` (`id`)), when using table: Category_Term 

答えて

2

まず、このデータをインポートしようとしているカテゴリテーブルが存在するかどうかを確認します。

カテゴリテーブルが存在する場合、このテーブルのすべてのcategory_idがカテゴリテーブルにidとして存在することを確認する必要があります。

より良いオプションは、最初のカテゴリテーブルをインポートしてからこのテーブルをインポートすることです。

一般的な最初のすべての親テーブルでは、データは子テーブルをインポートする必要があります。

汚いやり方がどの以下のとおりですちょうどあなたに問題のある行を提供しますクエリ以下problem-

を作成している行を知ること

set foreign_key_checks=0; 
import data here; 
set foreign_key_checks=1; 

をrecommended-されていません。

SELECT a.category_id FROM Category_Term a 
    LEFT JOIN Category b ON a.category_id=b.id 
    WHERE b.id IS NULL; 

注:category_idにcategory_idがあり、カテゴリテーブルのidがインデックスに登録されます。

+0

「このテーブル内のすべてのCATEGORY_IDがIDとして分類テーブルに存在すべきであることを確認してください。」。私もこれをやりたいそれは大きなテーブルです。私はこれを行うために別のコードを書く必要がありますか? mysqlimportがこの問題に遭遇した最初の行を報告できるのは良いことです。 – user697911

+0

いいえ私はそれは自動ではないと思うが、あなたは私の更新されたクエリで取得することができます.....このクエリは時間がかかる場合...ちょうどいくつかの一時テーブルの両方のテーブルから単一の列を挿入し、新しく作成されたテンポラリテーブルのクエリ。高速になります。 –

+0

問題は、インポートエラーのために、Category_Termテーブルが空になりました。何もインポートされていないため、selectステートメントでチェックすることはできません。 – user697911

0

私は@Zafarが提供するサンプルクエリを使用しますが、私は同様にDISTINCTを追加しました:

SELECT DISTINCT contries.city_id 
    FROM contries 
    LEFT JOIN cities ON contries.city_id=city.id 
    WHERE city.id IS NULL; 
関連する問題