olha, não entendo por que não utilizar o auto incremento. É um caso específico ou você simplismente quer controlar na mão os id´s? Normalmente isso não é uma boa ideia.
Utilizamos Informix aqui na empresa, e o auto increment dele (tipo SERIAL) não entra na replicação, portanto não pode ser utilizado…
Nesse caso, sempre que alguém vai salvar um registro que necessite disto, eu travo(lock) a transação sempre que alguém vai pegar o último ID, assim, garanto que só entrem novos e não duplicados…
Por exemplo, o cara salva um registro com id=4
em seguida ele apaga…
Quando for inserir um novo registro, o id (com auto-incremento) seria 5. Pra isso quero controlar o id, para o id ser 4 novamente.
E eu não quero deixar “espaços em branco” na minha tabela…
Já consegui resolver meu problema, retornei o numero do ultimo registro e incrementei com 1.
Cara se você saca de relacionamento entre tabelas faz assim, cria uma tabela onde você vai manter esse ultimo id, por exemplo quando você precisar saber qual o ultimo id você vai e consulta essa tabela, daí vamos dizer que você precisa adicionar um novo cliente você vai consulta nessa ultima tabela o ultimo id incremente em 1 salva na tabela e passa esse novo id para a tabela do cliente. Se não ficou muito claro é só voltar a postar aqui que estamos aqui pra isso.
Ok, entendo que você não queira ter espaços na sua tabela, mas dependendo do relacionamento entre as tabelas que você tiver, pode ficar um pouco complicado, principalmente na parte de referência entre as tabelas.
MySQL> SELECT COUNT(*) FROM tabela;
- vai retornar um numero X
- esse numero vc faz X++
- e pronto, vc tem o proximo numero de ID pra ser usado na hora de inserir
SELECT MAX nao é confiavel… SELECT COUNT menos ainda…
Se 2 pessoas iniciarem uma inclusão, ambas terao o mesmo valor de MAX. 1 das inclusoes vai falhar.