为什么我的自动递增ID不存在重复键错误?

时间:2015-02-04 18:43:54

标签: mysql auto-increment

我有一个像这样结构的表

 CREATE TABLE `person` (
   `uid` int(11) NOT NULL AUTO_INCREMENT,
   `email` varchar(150) NOT NULL,
   `pwd` varchar(50) NOT NULL,
   `first_name` varchar(45) DEFAULT NULL,
   `last_name` varchar(45) DEFAULT NULL,
   `is_active` tinyint(4) DEFAULT '1',
   `source` int(11) NOT NULL DEFAULT '1',
   `language_id` int(11) DEFAULT NULL,
   `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `modified_date` timestamp NULL DEFAULT NULL,
   `lastaccess_date` timestamp NULL DEFAULT NULL,
   `image_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`uid`),
 UNIQUE KEY `person_idx_1` (`email`),
 KEY `person_fk_1` (`source`),
 KEY `person_fk_2_idx` (`image_id`),
 CONSTRAINT `person_fk_1` FOREIGN KEY (`source`) 
   REFERENCES `person_source` (`uid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
 CONSTRAINT `person_fk_2` FOREIGN KEY (`image_id`) 
   REFERENCES `image` (`uid`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=200002 DEFAULT CHARSET=latin1;

此表中曾经有大约190000条记录。我只是使用proc删除(以反向FK顺序)所有用户,但在此数据库中为7进行一些目标测试。数据修剪后,我无法将数据插入此表。我收到以下错误:

Error Code: 1062. Duplicate entry 'XXXXX' for key 'PRIMARY'

我能够通过将表的自动增量更改为200000(注意我的show create table输出为200002)来修复此问题,我知道这将在删除数据之前的最后一条记录之后。

我知道为什么我的修复有效,但我的问题是发生了什么?为什么表中不再存在记录时会出现自动增量错误?另外,为什么自动增量值仍然处于原始的更高值?

非常感谢!

0 个答案:

没有答案