Mysql自动增量增加2和1?

时间:2012-06-27 12:09:58

标签: mysql insert auto-increment partitioning

如果我使用以下语法创建表,

CREATE TABLE IF NOT EXISTS `hashes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`hash` binary(20) NOT NULL,
PRIMARY KEY (`id`,`hash`),
UNIQUE KEY (`hash`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE = 4 AUTO_INCREMENT=1
PARTITION BY KEY(`hash`)
PARTITIONS 10;

使用以下语法插入查询

INSERT INTO hashes (hash) VALUES ($value) ON DUPLICATE KEY UPDATE hash = hash

如果插入或更新了行,则自动增量列将按预期工作。

虽然创建没有下面这个分区的表并且在上面插入查询,但每次更新或插入时自动增量值都会增加1,导致A_I列全部到位,因为查询可以执行10更新,然后插入1,导致列值跳转10个位置。

CREATE TABLE IF NOT EXISTS `hashes` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`hash` binary(20) NOT NULL,
PRIMARY KEY (`id`,`hash`),
UNIQUE KEY (`hash`)
) ENGINE=InnoDB AUTO_INCREMENT=1;

我理解为什么在使用INNO_DB的更新时价值会增加,但我不明白为什么在分区表时它没有?

1 个答案:

答案 0 :(得分:0)

你不能改变它,但你可以尝试这样的事情:

mysql> set @a:= (select max(id) + 2 from hashes); 

mysql> insert into hashes (id) values ($value) on duplicate key update id=@a;

注意:在mysql 5.6之后,分区会有一点改变,你有哪个版本?