【问题标题】:Error 1062: duplicate entry in non-primary field错误 1062:非主字段中的重复条目
【发布时间】:2016-02-10 06:35:03
【问题描述】:

我最近开始使用 MySQL 进行学习工作,现在面临以下问题:

我的前任创建了一个如下结构的文本挖掘表:

+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| TokenId    | int(11)      | NO   | PRI | 0       |       |
| Value      | varchar(255) | YES  |     | NULL    |       |
| Frequency  | int(11)      | YES  |     | NULL    |       |
| PMID       | int(11)      | YES  | MUL | NULL    |       |
+------------+--------------+------+-----+---------+-------+

在重组的背景下,我添加了以下列:

+------------+--------------+------+-----+---------+-------+
| NewTokenId | int(11)      | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+

如果我现在运行查询:

insert into TitleToken(NewTokenId) select t.TokenId from Token as t, TitleToken as tt where t.Value = tt.Value

甚至是查询:

insert into TitleToken(NewTokenId) values(1);

我得到以下输出:

错误 1062 (23000):键 'PRIMARY' 的重复条目 '0'

正如我所说,我对(动手)*SQL 比较陌生,感觉像是一个愚蠢的错误,但由于列 NewTokenId 不是主键,不是唯一的,甚至 Null 是 YES,我想我会基本上可以插入我想要的任何东西。

任何提示将不胜感激...在此先感谢:)

【问题讨论】:

  • 问题在于TokenId。应该是自动递增
  • 请仔细阅读错误信息。它不抱怨NewTokenId,它抱怨主键(即TokenId)。

标签: mysql


【解决方案1】:

这里的问题是你有一个主键“TokenID”的默认值,如果你没有在你的插入语句中插入一个键的值,系统会自动插入0。但是,如果有另一个元组此属性的相同值(可能是因为默认值为 0)您将收到该错误。

【讨论】:

  • 好的,我想要的功能实际上是 UPDATE,而不是 INSERT。感谢您的回答,它让我很快就找到了正确的方向:)
【解决方案2】:

您正试图在没有为TokenId 提供唯一值的情况下对表执行插入操作。默认情况下,根据表格描述,TokenId默认为0,该列中不能有多个相同的值。

【讨论】:

    猜你喜欢
    • 2018-05-01
    • 2011-05-19
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2015-04-26
    • 2014-02-02
    • 2015-04-10
    相关资源
    最近更新 更多