0

我有一个简单的

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

谢谢。

4

1 回答 1

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 行之后,你的 ID 将是 16000。如果这只是插入语句SHOW CREATE TABLE 之后,我仍然不知道发生了什么。

于 2013-07-09T11:27:59.883 回答