2016-06-21 28 views
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'. 
+1

'show engine innodb status'を実行して、出力のどこかで正確な詳細を見つけることができます("最後の外部キーエラー "か類似のものを探してください)。パーティションと外部キーが必ずしもうまく機能するとは限りません。 –

+0

両方のテーブルの照合を確認しましたか?彼らは両方とも同じ照合順序である必要があります。 –

+0

また、自動インクリメントフラグを設定しようとする可能性があります。 –

答えて

0

パーティション表からの出力を追加するには、他のテーブルの外部キー制約によって参照することはできません。

関連する問題