Por exemplo, se meu ultimo produto tem ID 10 e eu o removo, o próximo produto adicionado deveria ter o ID 10, porém ele recebe o increment e vem com ID 11, e o id 10 é perdido, não sei como arrumar isto.
Por exemplo, se meu ultimo produto tem ID 10 e eu o removo, o próximo produto adicionado deveria ter o ID 10, porém ele recebe o increment e vem com ID 11, e o id 10 é perdido, não sei como arrumar isto.
Guilherme, é assim mesmo que funciona. Os bancos de dados seguem o gerador de chave, que é incremental. Quando vamos inserir um novo registro, eles não buscam desde o início por uma chave com posição vazia para preencher essa posição. Eles sabem qual foi a última chave gerada e geram a próxima chave, o que é muito mais rápido do que varrer todo o banco de dados em busca de uma chave não utilizada (imagina um BD com 5 milhões de registros).
o campo ID e uma chave auto_increment, então infelizmente nao pode ser reutilizada, para caso você queira isto vai ter que fazer um esquema tipo um if(){} se o campo id tal estiver vago, ele preenche o campo.
você tem que pensa o seguinte em um banco com 3 registros voce vai tem 3 ID, si voce deleta o ID 1 este vai fica vago e si voce fizer um IF para preencher esta vaga voce vai perde o controle de cadastros, um cadastro que era para ser o ultimo lançamento agora é o primeiro.
Como os demais colegas falaram, é assim que os bancos de dados funcionam mesmo, pelo menos todos que eu trabalhei até o momento.
Já passei por casos que deveríamos manter sempre um número sequencial e "recuperar" números perdidos. Nestes casos, utilizamos um outro campo da tabela e o controle é feito pela lógica do programa mesmo, para buscar sempre o menor valor não utilizado.
Mas os campos auto incrementais dos bancos de dados, por questões de segurança, realmente apenas incrementam, nunca "voltam".