2013-07-09 39 views
0

我有一个简单MySQL的自动递增错误

INSERT INTO t1 (fields...) (SELECT fields... FROM t2); 

它周围插入8.000行和表的自动增量值设置为16.000〜,但它不完全2倍之多。我没有在查询中包含自动递增的ID,并且表格被截断。它可能是一个错误?我有版本5.5.24。 这是为什么,我该如何避免这种情况?

CREATE TABLE `order` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `` int(4) NOT NULL COMMENT '', 
    `` int(6) NOT NULL COMMENT '', 
    `` varchar(255) NOT NULL COMMENT '', 
    `` varchar(255) NOT NULL COMMENT '', 
    `` bigint(10) unsigned NOT NULL COMMENT '', 
    `` int(5) unsigned NOT NULL COMMENT '', 
    `` int(5) unsigned NOT NULL COMMENT '', 
    `` int(8) unsigned NOT NULL COMMENT '', 
    `` varchar(255) DEFAULT NULL COMMENT '', 
    `` int(3) DEFAULT NULL COMMENT '', 
    `` int(3) DEFAULT NULL COMMENT '', 
    `` date NOT NULL COMMENT '', 
    `` date DEFAULT NULL, 
    `` date DEFAULT NULL COMMENT '', 
    `` int(5) DEFAULT NULL COMMENT '', 
    `` varchar(2) DEFAULT NULL COMMENT '', 
    `` int(5) DEFAULT NULL COMMENT '', 
    `` varchar(255) DEFAULT NULL, 
    `` varchar(255) DEFAULT NULL, 
    `` char(1) DEFAULT NULL, 
    `` datetime DEFAULT NULL, 
    `` int(10) unsigned DEFAULT NULL, 
    `` datetime DEFAULT NULL, 
    `` int(10) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `` (``), 
    KEY `` (``), 
    KEY `` (``), 
    CONSTRAINT `` FOREIGN KEY (``) REFERENCES `users` (`id`), 
    CONSTRAINT `` FOREIGN KEY (``) REFERENCES `users` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=8440 DEFAULT CHARSET=utf8 

谢谢。

+0

这是初始插入新表还是可能存在一些已删除的记录? –

+0

截断应该工作。见[这里](http://sqlfiddle.com/#!2/dd8e2/6) –

+0

是的,我知道,这也是为什么我也很奇怪。 – user2511599

回答

1

这可能是您的服务器的配置(/etc/my.cnf例如)引起: 您可以设置auto_increment_incrementauto_increment_offset

如果第一个设置为x,您将有(last_id + x)为您的下一个ID。 如果第二个ID设置为y,则始终以y开头(然后每次添加x)。

更可能:您刚删除表格中的所有行并重新插入。这样auto_increment值不会再被设置为1。你必须TRUNCATE tablename重新设置这个计数器(如果你真的想删除所有的行)。

编辑:

只看见自己的CREATE TABLE声明。如果你真的在选项中创建了带有AUTO_INCREMENT=8440的表格,当然在插入8000行之后,您将拥有16000的ID。如果这只是插入语句后的SHOW CREATE TABLE,我仍然不知道发生了什么。

+0

我有一个基本的wampserver配置,我不' t认为有任何非默认的'auto_increment_offset'或'auto_increment_increment'值设置。是的,我已经检查过它们都被设置为'1'。 – user2511599