2017-04-19 50 views
0
私はこのクエリを実行するとき、私はSQLyogの外部キー関係の作成に関する問題を抱えている

SQLyogの作成、外部キーエラー

エラー:

Cannot add or update a child row: a foreign key constraint fails (zestagio . #sql-6dc_4b6151 , CONSTRAINT FK_CARRO FOREIGN KEY (CARRO) REFERENCES km_carro (IDCARRO))

MySQLのクエリ:

ALTER TABLE `zestagio`.`km_colaboradores` 
    ADD COLUMN `CARRO` int(11) NOT NULL after `TIPO`, 
    ADD CONSTRAINT `FK_CARRO` FOREIGN KEY (`CARRO`) REFERENCES `zestagio`.`km_carro`(`IDCARRO`) 
+0

'km_carro'(' IDCARRO')列はプライマリキーとして宣言されていますか? –

+0

はい、他のFOREIGN KEYSを作成したときにエラーが出ませんでした。ちょうどこの1つで、私は理由を知らない。 –

+0

'km_carro'と' km_colaboradores'に 'SHOW CREATE TABLE'を投稿してください。 [14.7.5.10 SHOW CREATE TABLE構文](https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html)を参照してください。 – wchiquito

答えて

1

エラーメッセージは、単にkm_colaboradoresテーブルにあるレコードがありません外部キーFK_CARROによって設定された制約を満たしている。

フィールドCARROは、intnot nullと定義されており、デフォルト値も指定されていません。この文でエラーは発生しませんが、外部キーはエラーを発生させないため、厳密なSQLモードは使用できません。おそらくテーブルにデータがあるので、CARROフィールドをこのように追加すると、すべてのレコードに対して0が設定されます。 strict SQLモードでは、これによりエラー・メッセージがすでに発生しているため、厳密なSQLモードを使用可能にできません。あなたが外部キーを追加しようとしたとき

しかし、その後、MySQLはそのため既存のレコードは、外部キー制約を破る、IDCARROが0だったkm_carroテーブル内のすべてのレコードを、見つけることができませんでした。

当面はCARROにヌル値を設定し、外部キーを追加し、必要に応じてCARROの値を必要に応じて更新してからヌル値を許可しないようにすることをお勧めします。

もう1つの方法は、CARROの明示的なデフォルト値を定義することです(IDCARROフィールドに存在する値)。

関連する問題