INSERT ... ON DUPLICATE KEY UPDATE为了InnoDB的
AUTO_INCREMENT处理目的,它被称为“混合模式插入”
。基本上,混合模式插入是已知所需值的 最大 数量的插入
AUTO_INCREMENT,但 实际上所需的 数量不是。
混合模式插入默认情况下会特别处理,如MySQL
docs中所述:
…对于“混合模式插入” …
InnoDB将分配比要插入的行数更多的自动增量值。但是,所有自动分配的值都是连续生成的(因此高于最近执行的先前语句生成的自动增量值)。“多余”的数字丢失。
如果您使用的是InnoDB,则可以选择:
- 避免
INSERT ... ON DUPLICATE KEY UPDATE
。 - 对于“传统”自动增量锁定模式,请将
innodb_autoinc_lock_mode
参数设置为0
,以确保所有INSERT
语句将为AUTO_INCREMENT
列分配连续的值。但是,这是通过在语句期间锁定来完成的,因此,此设置会导致性能下降。 - (推荐)忽略
AUTO_INCREMENT
列中的间隙。
注意:
AUTO_INCREMENT在MyISAM下,处理方式完全不同,这不会表现出此行为。



