什么导致MySQL中的重复PK?

时间:2012-03-12 20:10:02

标签: mysql primary-key archive auto-increment

到目前为止,我遇到过这么多次,但仍然不理解它(我的MySQL内部技能等于没有)。

我知道它可能是PEBKAC但是尝试手动复制行为会导致错误(自动增量)。

CREATE TABLE `foo_bar` (
  `id` int(12) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(12) unsigned DEFAULT NULL,
  `order_id` int(12) unsigned DEFAULT NULL,
  `email_address` varchar(50) DEFAULT NULL,
  `mobile_number` varchar(20) DEFAULT NULL,
  `message` longtext NOT NULL,
  `message_received` int(12) unsigned DEFAULT NULL,
  `failed_to_send` tinyint(1) unsigned DEFAULT NULL,
  `fraudulent_activity` tinyint(1) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=ARCHIVE DEFAULT CHARSET=utf8;

2 个答案:

答案 0 :(得分:0)

当您的程序在数据库中插入一行时,它应该提供NULL作为自动递增字段的值:

CREATE TABLE  `customers` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `name` VARCHAR( 128 ) NOT NULL
) ENGINE = MYISAM ;


INSERT INTO  `customers` ( `id` , `name` )
VALUES ( NULL ,  'Customer 1' ), ( NULL ,  'Customer 2' );

如果您尝试在id字段中插入特定值,MySQL将给出错误:

SQL query: 

    INSERT INTO  `customers` ( `id` , `name` )
    VALUES ( '1',  'Customer 3' );

MySQL said: 
#1062 - Duplicate entry '1' for key 'PRIMARY' 

答案 1 :(得分:0)

虽然没有出现“造成这种情况的原因”的答案,REPAIR TABLE解决了这个问题。

回答这个问题,我可以解决这个问题。