2016-06-21 22 views
1

Wie ich zu dieser Frage kam, ist eine Spaghetti von Fehlermeldungen in sich.Warum ist diese Fremdschlüsseleinschränkung falsch gebildet?

Zuerst war es die Fehlermeldung 1452: Cannot add or update a child row: a foreign key constraint fails.

... versucht, Daten mit einem absolut gültigen Fremdschlüssel einzufügen.

Jetzt habe ich die Tabellen neu erstellt, um das Problem zu duplizieren und einen neuen Fehler gefunden, der mich näher an die Ursache bringt.

Error Code: 1005. Can't create table `covers` (errno: 150 "Foreign key constraint is incorrectly formed") 

Hier sind die Tabellen:

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 ; 

Es ist eine neue Datenbank in Workbench entwickelt. Das Forward Engineer-Skript hat die Tabellen ohne Fehler erstellt, es scheint jedoch ein Problem mit ihnen zu bestehen.

Hinzufügen der Ausgabe von 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

Sie können 'show engine innodb status' ausführen und finden Sie die genauen Details irgendwo in der Ausgabe (suchen Sie nach" letzten Fremdschlüsselfehler "oder etwas ähnliches). Wie auch immer, ich glaube, dass Partitionen und Fremdschlüssel nicht unbedingt gut zusammenarbeiten. –

+0

Haben Sie die Sortierung beider Tabellen überprüft? Sie müssen beide die gleiche Zusammenstellung haben. –

+0

ALSO könnten Sie versuchen, das Autoinkrement-Flag –

Antwort

0

einer partitionierten Tabelle kann nicht von anderen Tabelle des Fremdschlüssel-Constraints referenziert werden.

Verwandte Themen