2015-05-03 66 views
0

如果我運行此代碼的所有工作得很好,但如果取消註釋最後一個約束,我得到了以下錯誤:MySQL的複製鍵錯誤

Error Code: 1022. Can't write; duplicate key in table 'transfer'

但有沒有另一個關鍵「fk_component_id」,有什麼不對的代碼?

-- ----------------------------------------------------- 
-- Table `pcdb`.`transfer` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `pcdb`.`transfer` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `component_id` INT UNSIGNED NOT NULL, 
    `type` INT NULL, 
    `parent_id` INT UNSIGNED NULL, 
    `source_id` INT UNSIGNED NULL, 
    `contractor_id` INT UNSIGNED NULL, 
    `src_department_id` INT UNSIGNED NULL, 
    `dest_department_id` INT UNSIGNED NULL, 
    `session_id` INT UNSIGNED NOT NULL, 
    `count` INT UNSIGNED NOT NULL, 
    `comment` TEXT(65535) NULL, 
    `active` TINYINT(1) NOT NULL DEFAULT 1, 
    PRIMARY KEY (`id`), 
    CONSTRAINT `fk_src_department_id` 
    FOREIGN KEY (`src_department_id`) 
    REFERENCES `pcdb`.`department` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_income_id` 
    FOREIGN KEY (`source_id`) 
    REFERENCES `pcdb`.`transfer` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_contractor_id` 
    FOREIGN KEY (`contractor_id`) 
    REFERENCES `pcdb`.`contractor` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_session_id` 
    FOREIGN KEY (`session_id`) 
    REFERENCES `pcdb`.`session` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_dest_department_id` 
    FOREIGN KEY (`dest_department_id`) 
    REFERENCES `pcdb`.`department` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_parent_id` 
    FOREIGN KEY (`parent_id`) 
    REFERENCES `pcdb`.`transfer` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION/*, 
    CONSTRAINT `fk_component_id` 
    FOREIGN KEY (`component_id`) 
    REFERENCES `pcdb`.`component` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION*/); 
+0

component_id中是否有關鍵字? –

+0

- ----------------------------------------------- ------ - Table'pcdb'.'component' - ------------------------------ ----------------------- CREATE TABLE IF NOT EXISTS'pcdb'.'component'( 'id' INT UNSIGNED NOT NULL AUTO_INCREMENT, 'name 'VARCHAR(255)NULL, PRIMARY KEY('id')); – user2075764

回答

2

聽起來好像您可能已經在數據庫的不同表上具有該名稱的約束。嘗試將該約束的名稱更改爲「fk_transfer_component_id」,然後查看是否仍然出現錯誤。

+0

是的,它有幫助,我只是認爲外鍵應該是每個表唯一的,但它似乎應該在整個方案中是唯一的 – user2075764