MySQL Workbench kamen mit der folgenden SQL-up eine Tabelle zu erstellen:MySQL Fehler 1022, wenn Tabelle erstellen
CREATE TABLE IF NOT EXISTS `mydb`.`errors_reports` (
`error_id` INT NOT NULL ,
`report_short` VARCHAR(15) NOT NULL ,
PRIMARY KEY (`error_id`, `report_short`) ,
INDEX `error_id_idx` (`error_id` ASC) ,
INDEX `report_short_idx` (`report_short` ASC) ,
CONSTRAINT `error_id`
FOREIGN KEY (`error_id`)
REFERENCES `mydb`.`errors` (`error_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `report_short`
FOREIGN KEY (`report_short`)
REFERENCES `mydb`.`reports` (`report_short`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
, die ich gut aussieht, und es gibt ein paar andere sehr ähnliche Tabellen in meiner Datenbank, die von MySQL war glücklich, zu schaffen.
Aber dieses ...
ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'
Ich kann nicht für das Leben von mir sehen Sie alle doppelten Schlüssel hier. Es ist nur ein Schlüssel definiert!
Ich verwende MySQL 5.6 mit einer neuen Standardinstallation. Im Fehlerprotokoll ist nichts enthalten.
Ideen?
Edit: durch einen Prozess der Eliminierung (zurück auf die einfachste mögliche Definition der Tabelle geht, dann allmählich Bits zurück in das Hinzufügen) erscheint dieses Bit zu sein, das Problem:
CONSTRAINT `error_id`
FOREIGN KEY (`error_id`)
REFERENCES `mydb`.`errors` (`error_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
die besonders ungerade ist als Es gibt identische Codes in mehreren anderen Tabellendefinitionen, und diese sind vollkommen in Ordnung!
ich mit dieser Abfrage kein Problem haben .. scheint, als ob es etwas anderes passiert sein kann –
Nicht sicher, dass Sie explizit einen Index für die FK-Spalten erstellen müssen. Ich hatte den Eindruck, dass das Erstellen der Referenz einen Index erzeugen würde. – Kermit
Das Herausziehen der INDEX-Anweisungen macht keinen Unterschied. –