0

今天我在我的表中添加了两个唯一键 ( external_id, name)。从那时起,id-column(主键)的计数非常奇怪,我无法重现该问题。

我没有删除任何行,但我更新了 ( ON DUPLICATE KEY)。我希望主键id被线性计数,例如:1、2、3、4、5、6,...

结构:

CREATE TABLE IF NOT EXISTS `table_test` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `external_id` int(10) NOT NULL,
  `x` int(5) NOT NULL,
  `y` int(5) NOT NULL,
  `z` int(5) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `external_id` (`external_id`,`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

内容:

ID  | external_id | name | x | y | z
------------------------------------
  1 |          1  | A    | 3 | 3 | 2
  2 |          2  | B    | 2 | 2 | 5
  7 |          3  | C    | 5 | 3 | 2
 11 |          1  | D    | 7 | 6 | 3
 12 |          2  | E    | 5 | 4 | 2
 17 |          3  | F    | 3 | 8 | 5
 21 |          1  | G    | 6 | 6 | 3
 22 |          2  | H    | 8 | 5 | 7
 23 |          3  | I    | 1 | 0 | 9

编辑: 最新的 ID 是23. 在PHPMyAdmin的行统计中,下一个自动索引被宣布为27!24到26怎么办?我很困惑。

结构有什么问题还是我没听说过的秘密?提前致谢!

4

2 回答 2

0

感谢您的回复。最后我发现了错误。结构应该是这样的:

CREATE TABLE IF NOT EXISTS `table_test` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `external_id` int(10) NOT NULL,
  `x` int(5) NOT NULL,
  `y` int(5) NOT NULL,
  `z` int(5) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`external_id`,`name`) # ----- this line was changed
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
于 2013-08-26T23:34:23.213 回答
0

如果您已经从表中删除了数据,那么已经使用过的 id 值将不会再次使用。因此,如果您有:

ID  | external_id | name | x | y | z
------------------------------------
  1 |          1  | A    | 3 | 3 | 2
  2 |          2  | B    | 2 | 2 | 5
  3 |          3  | C    | 5 | 3 | 2
  4 |          1  | D    | 2 | 2 | 5
  5 |          2  | E    | 5 | 3 | 2
  6 |          3  | F    | 5 | 3 | 2

然后删除第 3 - 6 行并添加更多数据,下一次 id 将从 7 开始递增。

于 2013-08-26T20:27:21.897 回答