web-dev-qa-db-ja.com

外部キーとデータのインポート

私が持っています:

  • cSVファイル(5000以上のレコード);
  • 空のitemテーブル。
  • 空のfavouriteテーブルです。
  • 他の多くの空のテーブル。

itemテーブルにCSVファイルの内容を入力します。次に、両方のテーブル間にいくつかの外部キー関係を作成したいと思います。

これをどの順序で実行しますか?

これを試みるたびにエラーが発生し続けます。

#1452 - Cannot add or update a child row: a foreign key constraint fails...

空のfavouriteテーブルには、すでにいくつかの外部キー制約が設定されていることに注意してください。 PhpMyAdminとMySQL Workbenchを使用しています。

すべてのテーブルにデータが入力されているはずですかbefore外部キー関係を設定しましたか?または、関係を設定してからデータを入力しますか?

2
jonboy

いくつかの選択肢があります。制約なしでテーブルを作成して後で追加するか、または外部キーを使用してテーブルを作成し、外部キーチェックを無効にしてデータをインポートすることができます。mysqlセッションでSET FOREIGN_KEY_CHECKS=0;を実行するだけです。それらを一時的に無効にします。

例えば:

mysql> insert into favourite values( 1,1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`tmp`.`favourite`, CONSTRAINT `favourite_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `item` (`item_id`))
mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into favourite values( 1,1);
Query OK, 1 row affected (0.00 sec)
7
Philᵀᴹ
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> LOAD DATA INFILE ...
mysql> LOAD DATA INFILE ...
mysql> SET FOREIGN_KEY_CHECKS=1;
1
user118129

ターミナルを使用している場合は、次のコマンドで資格情報を使用してMySQLにログインします。

mysql -u[your_username] -p[your_password]

次のコマンドを使用して、MySQL外部キー制約チェックを0に設定します。

SET FOREIGN_KEY_CHECKS = 0;

以下のようなソースコマンドを使用してデータベースをインポートします。

SOURCE /path/to/your/sql/file.sql

次のコマンドを使用して、MySQL外部キー制約チェックを1に戻します。

SET FOREIGN_KEY_CHECKS = 1;

追伸Ubuntu 14.04、16.04、18.04でテスト済み

0
pawanpandey392