【问题标题】:MySQL Duplicate primary key on unexisting keyMySQL在不存在的键上重复主键
【发布时间】:2011-12-08 18:44:34
【问题描述】:

我在MySQL 表上遇到了一个奇怪的问题。尝试插入新行时,它说主键是重复的。我的主键是自动增量的,没有在我的查询中设置(由 MySQL 自动设置)。

问题是我在一个甚至不存在的键上出现“重复主键”错误(我检查过)。我解决了增加当前auto_increment 值的问题,但我不明白它是如何发生的。

任何帮助都会很棒。

编辑

表创建

CREATE TABLE `articles_mvt` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `ext_article_id` int(5) NOT NULL,
  `date_mvt` date NOT NULL,
  `qte` float(4,2) NOT NULL,
  `in_out` enum('in','out') NOT NULL,
  `ext_nateco_id` int(5) NOT NULL,
  `ext_agent_id` int(5) NOT NULL COMMENT 'Demandeur',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1647 ;

有问题的查询

INSERT INTO articles_mvt (
        `ext_article_id`,
        `date_mvt`,
        `qte`,
        `in_out`,
        `ext_nateco_id`,
        `ext_agent_id`
    )
    VALUES (
        '".$_POST["numArticle"]."',
        '".dateSql($_POST["date_mvt"])."',
        ".$_POST["qte_entier"].".".$_POST["qte_virgule"].",
        '".$_POST["in_out"]."',
        ".$_POST["numNateco"].",
        ".$_POST["demandeur"]."
    )

FYI 变量已在代码的前面部分进行了清理;)

【问题讨论】:

  • 如果您不发布查询,我们将无法帮助您...

标签: mysql duplicates


【解决方案1】:

好吧,我认为当时您没有检查主键上的 auto Inc 标志。因此,当您尝试输入值 0 时,会在主键中插入值,而对于第二个条目,则会出现错误。像这样

ID Value 
0   A    ok it not give error
0  ff    it gives error..

或者您可以尝试插入 ID 已存在的行,例如

ID Value 
11   A    ok it not give error
11  ff    it gives error..

【讨论】:

  • 主键自增
  • 是你的表语法是这样的 DROP TABLE IF EXISTS Table;创建表Table (Id int(10) unsigned NOT NULL AUTO_INCREMENT, Name varchar(45) NOT NULL, PRIMARY KEY (Id)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  • 您在表中使用了 AUTO_INCREMENT=1647。请确保您的表数据不包含大于 1647 的 id。否则您的表结构是好的。只需使用诸如 select Max(id) from articles_mvt 之类的查询来检查您的最大 id 值;
  • 我做到了。当问题发生时,auto_increment 是 1601,而我在该行中的最高 id 是 1599...
猜你喜欢
  • 2016-11-18
  • 2014-10-27
  • 1970-01-01
  • 2016-07-04
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多