MySQL auto_increment

Criei um banco de dados no MySQL + um sistema em Java para gerenciar esse base de dados.

Numa das tabelas, a chave primária é do tipo INTEGER e AUTO_INCREMENT

Supondo que eu tenha 10 registros cadastrados através do front-end em Java, o MySQL seta a chave primária de cada um para 1, 2, 3, 4, etc…
Até aí tudo bem.

Mas o problema é que se eu deleto esses 10 registros, e resolver inserir novos registros, o MySQL não vai começar do 1 novamente. Ele começará a setar a chave primária a partir do 11, mesmo após todos os outros registros terem sido deletados.

Porque? Tem como resolver esse impasse?

Lógico que ele não vai voltar!

Se quiser que ele volte, terá que alterar a tabela setando o valor de auto_increment para 0 novamente:

Mas você só deve fazer isso quando quiser esvaziar a tabela, e recomeçar, pois se você fizer isso toda hora, vai virar uma bagunça.

mas cara… o que tem demais isso?! porque isso é um impasse??!

deixa a chave ser a partir do 11! tem problema?

um abraço!!

a chave numerica auto-increment deve ser transparente e servir de index pro banco…

nunca, mas nunca mesmo, faça hard-code usando PK numerica auto-incremental…isso vai te zuar a vida…

[quote]nunca, mas nunca mesmo, faça hard-code usando PK numerica auto-incremental…isso vai te zuar a vida…
[/quote]

pedrobusko, o que você quis transmitir? Que eu não devo usar como chave primária um INTEGER AUTO_INCREMENT?

Aproveitando o tópico, alguém pode postar um exemplo de código para modificar os atributos de uma coluna no MySQL? Já tentei mas ocorre erro na sintaxe.

Ex: Há uma coluna nome_vendedor que é um varchar(20) e quero mudar para varchar(30). Tentei:

ALTER TABLE vendas ALTER COLUMN nome_vendedor varchar(30)

Mas não funcionou.

Obrigado!

Olá Newbie!

O que o Pedro quis falar foi:
Se vc usar chave auto-increment está deixando seu sistema dependente do banco…quer dizer, o seu sistema deveria ter a camada DAO separada de forma que o banco não tivesse relevância. Por exemplo, vc pode criar uma lógica para controlar a geração de chaves, a cada NOVO registro inserido vc manda buscar uma chave para ele.
E caso vc queira que a contagem reinicie, vc mesmo pode ir na sua tabela de chaves e alterar a ultima chave que está lá.
Dessa forma, não importa se vc está usando Mysql, Oracle, postgress ou SqlServer.

t+

Não sei que tipo o MySQL usa para criar auto incremental, mas no oracle por exemplo, os índices são BigInteger´s. Para se reiniciar ou reusar índices tem-se de tomar MUITO cuidado principalmente se as triggers não forem bem feitas e “novos relacionamentos” começarem a aparecer :grin: T+