私が持っています:
item
テーブル。favourite
テーブルです。item
テーブルにCSVファイルの内容を入力します。次に、両方のテーブル間にいくつかの外部キー関係を作成したいと思います。
これをどの順序で実行しますか?
これを試みるたびにエラーが発生し続けます。
#1452 - Cannot add or update a child row: a foreign key constraint fails...
空のfavourite
テーブルには、すでにいくつかの外部キー制約が設定されていることに注意してください。 PhpMyAdminとMySQL Workbenchを使用しています。
すべてのテーブルにデータが入力されているはずですかbefore外部キー関係を設定しましたか?または、関係を設定してからデータを入力しますか?
いくつかの選択肢があります。制約なしでテーブルを作成して後で追加するか、または外部キーを使用してテーブルを作成し、外部キーチェックを無効にしてデータをインポートすることができます。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)
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> LOAD DATA INFILE ...
mysql> LOAD DATA INFILE ...
mysql> SET FOREIGN_KEY_CHECKS=1;
ターミナルを使用している場合は、次のコマンドで資格情報を使用して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でテスト済み