如果我使用以下语法创建表,
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
的更新时价值会增加,但我不明白为什么在分区表时它没有?
答案 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之后,分区会有一点改变,你有哪个版本?