【问题标题】:MySQL query giving duplicate entry error 1062MySQL查询给出重复条目错误1062
【发布时间】:2012-07-06 18:11:13
【问题描述】:

为什么这个查询会出错?错误是:SQL 错误 (1062): Duplicate entry '0' for key 'PRIMARY'

INSERT INTO `static_number_source` (`IDString`, `source`) VALUES
('RUS-001A', 'Thub'), #one
('RUS-001A', 'Fort'), #two
('RUS-002A', 'Thub'), #three
('RUS-002A', 'Fort'), #four
('RUS-003A', 'Thub'), #five
('RUS-003A', 'Fort'), #six
('RUS-004A', 'Thub'), #seven
('RUS-004A', 'Fort'); #eight

【问题讨论】:

  • 表架构是什么样的?
  • ID、IDString、来源。 ID 是主键。 ID 和来源必须是唯一的,但 IDString 可以是非唯一的。
  • 不只是列名,我感兴趣的是 ID 是否具有默认值或 AUTO_INCREMENT...
  • ID 应该是 AUTO_INCREMENT... 我正在使用其他人创建的数据库。我怎么能确定呢?我正在使用 HeidiSQL。
  • 使用show create table static_number_source

标签: mysql mysql-error-1062


【解决方案1】:

您可以更改表以将 AUTO_INCREMENT 添加到 ID 字段,或始终在插入时提供 Id

要添加AUTO_INCREMENT,只需在表中找到id的最大值并将其设置为1。

【讨论】:

    【解决方案2】:

    IDString 似乎设置为 PRIMARY。 PRIMARY 必须具有唯一值。如果要使用具有相同值的多个值,请使用常规的非唯一 INDEX。

    顺便说一句,如果您在两个字段上都有唯一索引,那么它们是相似的:

    ('RUS-002A', 'Fort'), #three
    ('RUS-002A', 'Fort'), #four
    

    【讨论】:

    • 我在该表中的 IDString 列还有其他不唯一的条目。对于#three 和#four 的示例,它们在我的实际查询中实际上并不相同。当我更改帖子的值时,我只是搞砸了。我编辑了我的第一篇文章。
    • @KebinKeeler 好的,那么您需要删除 IDString 上的 PRIMARY 键并使用常规 INDEX 非唯一:ALTER TABLE static_number_source ADD INDEX ( IDString )
    • 表结构有 3 列。 ID,IDString,来源。 ID 是主键。
    • IDString 字段已经可以接受非唯一条目。有时有 4 个条目是相同的,只要主键和来源不同即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2011-07-13
    • 2011-05-19
    • 2017-11-28
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多