【问题标题】:Duplicate key error in MySQLMySQL中的重复键错误
【发布时间】:2013-08-03 18:56:53
【问题描述】:

以下查询导致错误。我在 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'

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

【问题讨论】:

  • 您有重复的键定义。请参阅下面的答案。

标签: mysql foreign-keys relational-database


【解决方案1】:

在整个查询中不能有两个外键名称相同。

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` )

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

【讨论】:

  • 感谢您的帮助。我是我的坏人。正如你所说,还有另一个同名的外键。谢谢
  • @Satthy 很高兴为您提供帮助。如果您需要更多帮助,请随时问我。 :) 顺便说一句,谢谢你的接受!
【解决方案2】:

您正在向“int_supr_id”列添加索引,然后还向其添加primary_index。您只能为其添加 1 个索引(好吧,在正常情况下)

【讨论】:

    【解决方案3】:

    它可能会引发错误,因为您在一列 int_supr_id 上同时创建了主键和外键

    【讨论】:

    • 这正是我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2017-02-17
    相关资源
    最近更新 更多