MySQL中的重复键错误

时间:2013-08-03 18:56:53

标签: mysql foreign-keys relational-database

以下查询导致错误。我在MySQL Workbench中创建了这个查询

Error

SQL query:

-- -----------------------------------------------------
-- Table `smsdb`.`IntSupervisor`
-- -----------------------------------------------------
  CREATE TABLE IF NOT EXISTS `smsdb`.`IntSupervisor` (
   `int_supr_id` VARCHAR( 32 ) NOT NULL ,
   `cent_id` INT NOT NULL ,
   INDEX `fk_IntSupervisor_Person1_idx` ( `int_supr_id` ASC ) ,
   INDEX `fk_IntSupervisor_Center1_idx` ( `cent_id` ASC ) ,
   PRIMARY KEY ( `int_supr_id` ) ,
   CONSTRAINT `fk_parent_id` FOREIGN KEY ( `int_supr_id` ) 
   REFERENCES `smsdb`.`Staff` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT ,
   CONSTRAINT `fk_center_id` FOREIGN KEY ( `cent_id` )
   REFERENCES  `smsdb`.`Center` (`cent_id`
 ) ON DELETE CASCADE ON UPDATE RESTRICT
 ) ENGINE = InnoDB;

执行时收到错误消息:

MySQL said: Documentation  
    #1022 - Can't write; duplicate key in table 'intsupervisor'

如果有人对我如何解决这个问题有任何想法,请指导我正确的方向。谢谢!

3 个答案:

答案 0 :(得分:1)

(哎呀,快速阅读)

您正在向列'int_supr_id'添加索引,然后还向其添加primary_index。你只能添加1个索引(在正常情况下)[/ p>]

答案 1 :(得分:1)

欢迎使用MySQL中的关系数据库! ;)


在整个查询中,您不能有两个外键命名相同的东西。

PRIMARY KEY ( `int_supr_id` ) ,
       CONSTRAINT `fk_parent_id` FOREIGN KEY ( `int_supr_id` ) 

在上面的陈述中,您无法在单个列上重新定义索引类型。

那么,我该如何解决这个恼人的错误呢?


根据数据库的结构,您需要删除上面两行中的一行。我猜你从你正在创建的那个表中链接到另一个表,所以我建议替换...

PRIMARY KEY ( `int_supr_id` ) ,
       CONSTRAINT `fk_parent_id` FOREIGN KEY ( `int_supr_id` )

以下内容:

CONSTRAINT `fk_parent_id` FOREIGN KEY ( `int_supr_id` )

(如果上述方法不起作用,您可能需要为外键指定表名)

答案 2 :(得分:0)

它可能会抛出错误,因为您在一列int_supr_id

上创建了主键和外键