
Tenho uma tabela com uma coluna de auto-incremento para a chave primária. Ao adicionar e/ou excluir registros o valor de auto incremento irá continuar a aumentar.
problema 1:
Se eu tiver 10 registros inseridos e depois deletar 9 dos 10 registros, o próximo valor a ser inserido será 11, não 9.
Solução:
Pode-se executar a seguinte query:
ALTER TABLE tablename AUTO_INCREMENT = 1
Isso irá redefinir o valor do auto-incremento para o maior valor definido +1, assim, o valor de auto-incremento do próximo registro a ser inserido terá início a partir 9, no exemplo dado.
Pode-se utilizar também essa técnica, quando se deseja de fato limpar todos os registros da tabela e recomeçar o auto-incremento.
DELETE FROM tablename ALTER TABLE tablename AUTO_INCREMENT = 1
Problema 2:
Se eu tivesse entrado com 10 registros, e excluido alguns como o 4 e 5 e quero inserir próximo registro como 4 não 11.
Solução:
Execute a seguinte query:
SET insert_id = 4;
INSERT INTO tablename VALUES ('blah', '...');
Isto irá adicionar o próximo registro na posição 4.
SET insert_id = # (onde # é o valor do auto-incremento que você quer usar).
PS.: Só é eficaz para a inserções imediatas imediatas, uma por vez.
Related posts:

Muito bom, vai ajudar bastante a corrigir varios DB. Valeu Jonas, sempre trazendo coisa boa pra nós.
[...] é velha, mas os alunos sempre perguntam… Então estou colocando aqui para atender o pessoal. Como resetar um campo auto increment no MySQL ? « [...]
Caro Jonas, ótimo post. Porém vejo que você não mostrou como realmente resetar o AUTO_INCREMENT. Da forma que o fez, teria que excluir a tabela, e as vezes não é isso que as pessoas querem ou podem fazer. Muitos devem vir parar no seu post esperando ler como se faz para zerar o AI, ou seja, quando for inserir um novo registro na tabela, ele comece o ID do 1.
Acho que a forma mais eficaz seria a seguinte:
ALTER TABLE `tabela` DROP `id`;
ALTER TABLE `tabela` AUTO_INCREMENT = 1;
ALTER TABLE `tabela` ADD `id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
Dessa forma ele zera o campo ID, excluindo-o. É claro que se tiver registros, os IDs já inseridos não serão sobrescritos, então dependendo da situação vale a pena zerar os registros tbm.
Blz Rômulo, obrigado pelo comentário.