2015-05-03 63 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