1
この質問にどのように到着したかは、エラーメッセージのスパゲッティです。この外部キー制約が正しく構成されていないのはなぜですか?
まず、エラーメッセージ1452: Cannot add or update a child row: a foreign key constraint fails
がありました。
...絶対に有効な外部キーを持つデータを挿入しようとしていません。
今、私は問題を再現するためにテーブルを再作成し、根本的な原因に私を近づける新しいエラーを発見しました。
CREATE TABLE IF NOT EXISTS `entities` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`type` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`) )
ENGINE = InnoDB
AUTO_INCREMENT = 100001
PARTITION BY KEY() PARTITIONS 10 ;
CREATE TABLE IF NOT EXISTS `covers` (
`id` BIGINT(20) NOT NULL,
`title` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`) ,
CONSTRAINT `covers-id`
FOREIGN KEY (`id`)
REFERENCES `entities` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB ;
そのベンチに設計された新しいデータベース:ここ
Error Code: 1005. Can't create table `covers` (errno: 150 "Foreign key constraint is incorrectly formed")
はテーブルです。フォワードエンジニアスクリプトはエラーなしでテーブルを作成しましたが、問題があるようです。
show engine innodb status
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-06-21 17:42:46 7f7ffa000700 Error in foreign key constraint of table `baka`.`IF`:
Create table `baka`.`IF` with foreign key constraint failed. Referenced table `baka`.`entities` not found in the data dictionary near '
FOREIGN KEY (`id`)
REFERENCES `entities` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB'.
'show engine innodb status'を実行して、出力のどこかで正確な詳細を見つけることができます("最後の外部キーエラー "か類似のものを探してください)。パーティションと外部キーが必ずしもうまく機能するとは限りません。 –
両方のテーブルの照合を確認しましたか?彼らは両方とも同じ照合順序である必要があります。 –
また、自動インクリメントフラグを設定しようとする可能性があります。 –