Parece ter algo a ver com a forma como suas instruções INSERT são formadas. Veja este violino , que é ligeiramente modificado do seu exemplo. Nesse caso, você não obtém lacunas (mas provavelmente obterá se anexar mais inserções... na verdade, sim .).
EDIT:Depois de um pouco mais de escavação, descobri que você não obtém lacunas se usar o mecanismo MyISAM (em oposição ao InnoDB). Então, talvez seja uma falha ou escolha curiosa de design no InnoDB...?
EDIT 2:Pesquisas adicionais revelaram este bug , arquivado contra o mecanismo de armazenamento InnoDB. Ele corresponde muito bem ao caso de uso da pergunta original. Nenhuma resolução para o bug foi fornecida, no entanto, parece que uma resolução é definir
innodb_autoinc_lock_mode
para 0 em seu arquivo my.cnf antes da inicialização do mysqld.