MySQL Workbench si avvicinò con il seguente SQL per creare una tabella:errore MySQL 1022 durante la creazione tabella
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
che guarda bene a me, e ci sono un sacco di altri tavoli molto simili nel mio database che MySQL era perfettamente felice di creare.
Ma questo ...
ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'
non posso per la vita di me vedere duplicati delle chiavi qui. C'è solo una chiave definita!
Sto eseguendo MySQL 5.6 con una nuova installazione predefinita. Non c'è niente nel log degli errori.
Idee?
Edit: attraverso un processo di eliminazione (tornare al più semplice definizione possibile del tavolo, poi gradualmente aggiunta di bit nel) il problema sembra essere questo bit:
CONSTRAINT `error_id`
FOREIGN KEY (`error_id`)
REFERENCES `mydb`.`errors` (`error_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
particolarmente strano come c'è un codice identico in molte altre definizioni di tabella e quelle sono perfettamente a posto!
Non ho alcun problema con questa query .. sembra che ci può essere qualcos'altro –
Non è sicuro di dover creare in modo esplicito un indice per le colonne FK. Avevo l'impressione che la creazione del riferimento avrebbe creato un indice. – Kermit
Estrarre le istruzioni INDICE non fa differenza. –