MySQL Workbench wymyślił następującym SQL utworzyć tabelę:Błąd MySQL 1022 podczas tworzenia tabeli
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
który wygląda dobrze dla mnie, i istnieje kilka innych bardzo podobnych tabel w mojej bazy danych MySQL był całkowicie szczęśliwy w tworzeniu.
Ale ten ...
ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'
nie mogę dla życia mnie zobaczyć tutaj żadnych duplikatów kluczy. Został zdefiniowany tylko jeden klucz!
Używam MySQL w wersji 5.6 ze świeżą domyślną instalacją. W dzienniku błędów nie ma nic.
Pomysły?
Edycja: w procesie eliminacji (wracając do najprostszej definicji tabeli, a następnie stopniowe dodanie bitów widok) problem pojawia się bit:
CONSTRAINT `error_id`
FOREIGN KEY (`error_id`)
REFERENCES `mydb`.`errors` (`error_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
co jest szczególnie dziwne, istnieje identyczny kod w kilku innych definicjach tabel i są one całkowicie w porządku!
nie mam żadnego problemu z tego zapytania .. Wygląda na to, że może być coś innego dzieje –
Nie jesteś pewien, że musisz jawnie utworzyć indeks dla kolumn FK. Miałem wrażenie, że stworzenie odnośnika stworzy indeks. – Kermit
Wyciąganie instrukcji INDEX nie robi różnicy. –