MySQL Workbench đã đưa ra các lệnh SQL sau để tạo ra một bảng:MySQL lỗi 1022 khi tạo bảng
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
mà có vẻ tốt đẹp đối với tôi, và có một loạt các bảng rất tương tự khác trong cơ sở dữ liệu của tôi mà MySQL hoàn toàn hạnh phúc để tạo ra.
Nhưng một này ...
ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'
tôi không thể cho cuộc đời của tôi nhìn thấy bất kỳ phím trùng lặp ở đây. Chỉ có một khóa được xác định!
Tôi đang chạy MySQL 5.6 với cài đặt mặc định mới. Không có gì trong nhật ký lỗi.
Ý tưởng?
Edit: thông qua một quá trình loại trừ (trở lại định nghĩa đơn giản nhất của bảng, sau đó dần dần thêm bit trở lại trong) vấn đề dường như là bit này:
CONSTRAINT `error_id`
FOREIGN KEY (`error_id`)
REFERENCES `mydb`.`errors` (`error_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
trong đó đặc biệt kỳ lạ như có mã giống hệt nhau trong một số định nghĩa bảng khác và chúng hoàn toàn ổn!
tôi không có bất kỳ vấn đề với truy vấn này .. có vẻ như có thể có cái gì khác xảy ra –
Không chắc chắn rằng bạn phải tạo một chỉ mục rõ ràng cho các cột FK. Tôi đã ấn tượng rằng việc tạo tham chiếu sẽ tạo ra một chỉ mục. – Kermit
Kéo ra các câu lệnh INDEX không tạo ra sự khác biệt. –