2012-06-27 135 views
0

如果我創建一個表具有以下語法,Mysql自動增量增加2和1?

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; 

我明白了爲什麼與更新的價值增加,但我不明白爲什麼它不會當表被分區?

回答

0

你不能改變這一點,但你可以嘗試這樣的事:

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

mysql> insert into hashes (id) values ($value) on duplicate key update [email protected]; 

注:分區改變一點點的MySQL 5.6之後,你有哪一個版本?