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_incrementますauto_increment_offset

最初の id が に設定されている場合はx(last_id + x)次の id があります。2 番目の 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 に答える