【问题标题】:#1062 - Duplicate entry for key 'PRIMARY'#1062 - 键“PRIMARY”的重复条目
【发布时间】:2025-11-28 03:35:02
【问题描述】:

所以我的 MySQL 数据库的行为有点奇怪。这是我的桌子:

Name shares id  price   indvprc
cat   2     4   81      0
goog  4     4   20      20
fb    4     9   20      20

我在尝试插入表格时收到此 #1062 错误。所以我进一步研究它并意识到当我尝试将值插入到表中时,其中名称和份额值相同,它会返回 #1062 错误。例如,如果我插入:

fb    4      6     20   20 

它会返回一个错误。但是,如果我将股数更改为 6,它会运行良好。是因为我的一列可能是唯一的,还是只是 mysql 的原因?

【问题讨论】:

  • 你表的主键是什么?主键字段中不能有重复值。主键也可以由多个字段组成,那么您的键中有哪些字段?
  • 不确定,但您的数据库能否在 sharesid 之间形成关系?看看phpMyAdmin,看看你能找到什么......
  • 您的主键很可能由Nameshares 列组成。这意味着两列的组合必须是唯一的(在您的示例中,组合 fb, 4 已经存在)
  • 在我的 phpmyadmin 中,我无法单击名称和共享的主键。这意味着什么?
  • 请显示您的架构。

标签: mysql sql mysql-error-1062


【解决方案1】:

使用SHOW CREATE TABLE your-table-name 查看哪一列您的主键。

【讨论】:

  • 我知道了:CREATE TABLE stocks ( name varchar(10) NOT N...
  • 这应该会告诉你主键和唯一键是什么。
【解决方案2】:

确切的错误信息是什么? #1062 表示重复条目违反列的主键约束 - 归结为您不能在列中有两个相同的值。错误消息应该告诉您哪些列受到限制,我猜是“共享”。

【讨论】:

    【解决方案3】:

    您需要删除 shares 作为您的 PRIMARY KEYUNIQUE_KEY

    【讨论】:

    • 我所做的是我删除了 sharesname 并使用索引索引读取它们。
    【解决方案4】:

    这可能不是最好的解决方案,但执行以下操作可以解决问题

    第 1 步:使用以下命令进行数据库转储

    mysqldump -u root -p databaseName > databaseName.db
    

    找线

    ENGINE=InnoDB AUTO_INCREMENT="*****" DEFAULT CHARSET=utf8;
    

    第 2 步:将 ******* 更改为 mysql 表 ID 的最大 ID。保存此值。

    第三步:再次使用

    mysql -u root -p databaseName < databaseName.db
    

    在我的情况下,当我添加一个手动条目以用于将数据输入到其他表中时,我遇到了这个错误。一些我们必须如何使用 mysql 命令将值 AUTO_INCREMENT 设置为最大 id

    【讨论】:

    • 我收到错误无法识别的语句类型。 (靠近位置 0 的“ENGINE”)
    【解决方案5】:

    我通过将“锁定”属性从“共享”更改为“独占”解决了这个问题:

    ALTER TABLE `table` 
    CHANGE COLUMN `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '' , LOCK = EXCLUSIVE;
    

    【讨论】:

      【解决方案6】:
      1. 确保选择了PRIMARY KEY AUTO_INCREMENT
      2. 只需启用自动增量:
        ALTER TABLE [table name] AUTO_INCREMENT = 1
      3. 执行插入命令时,必须跳过此键。

      【讨论】:

        【解决方案7】:

        由您的域提供商 cpanel 修复数据库。

        或者看看你是不是在phpMyAdmin中合并了一些东西

        【讨论】:

          【解决方案8】:

          我在使用 DataNucleus 和使用 UTF8 创建的数据库的 mySQL 中遇到了这个错误 - 错误是由主键的这个注释引起的:

          @PrimaryKey
          @Unique
          @Persistent(valueStrategy = IdGeneratorStrategy.UUIDSTRING)
          protected String id;
          

          删除表并使用此修复它重新生成它。

          @PrimaryKey
          @Unique
          @Persistent(valueStrategy = IdGeneratorStrategy.UUIDHEX)
          protected String id;
          

          【讨论】:

            【解决方案9】:

            由于存在自动增量和主键列,我正在导入的数据库在导入过程中发生冲突。

            问题在于,在 .sql 文件中,表被分割成多个“INSERT INTO”,并且在导入期间这些查询一起执行。

            我的解决方案是取消选择 Navicat 上的“在每次执行中运行多个查询”,它运行良好

            【讨论】: