Digamos que tenho 5 registros com auto incremento:
1 - azul
2 - vermelho
3 - amarelo
4 - verde
5- branco
Ai deleto o registro 3 (amarelo) e gravo um novo registro (preto). O novo registro fica sendo 6-preto, todavia ele é gravado na posição onde estava o 3-amarelo (que foi deletado). Como faço para que ao inves deste novo registro entrar na posição do registro que foi deletado, ser criado sempre na sequencia da posição, ficando assim:
1 - azul
2 - vermelho
4 - verde
5- branco
6 - preto
MySQL não possui sequence…
Possui auto_increment, que, dentre outras coisas, define o valor de uma chave primária a cada inserção e não permite que um valor seja repetido, mesmo que seu “dono” tenha sido deletado.
no postgres isso não ocorre, ao deletar um valor e adicionar outro, a sequencia segue normal, um dado só ocupa a posição de outro quando é feito um update na posição selecionada, caso contrário, a sequencia segue normal…
Digamos que tenho 5 registros com auto incremento:
1 - azul
2 - vermelho
3 - amarelo
4 - verde
5- branco
Ai deleto o registro 3 (amarelo) e gravo um novo registro (preto). O novo registro fica sendo 6-preto, todavia ele é gravado na posição onde estava o 3-amarelo (que foi deletado). Como faço para que ao inves deste novo registro entrar na posição do registro que foi deletado, ser criado sempre na sequencia da posição, ficando assim:
1 - azul
2 - vermelho
4 - verde
5- branco
6 - preto
[/quote]
com base no que você diz que fica na posição do antigo 3 amarelo? se for por uma simples query, seria só você ordenar pelo seu campo numérico, que acredito ser id.
Digamos que tenho 5 registros com auto incremento:
1 - azul
2 - vermelho
3 - amarelo
4 - verde
5- branco
Ai deleto o registro 3 (amarelo) e gravo um novo registro (preto). O novo registro fica sendo 6-preto, todavia ele é gravado na posição onde estava o 3-amarelo (que foi deletado). Como faço para que ao inves deste novo registro entrar na posição do registro que foi deletado, ser criado sempre na sequencia da posição, ficando assim:
1 - azul
2 - vermelho
4 - verde
5- branco
6 - preto
[/quote]
O correto é você criar sua consulta usando uma cláusula “ORDER BY”, se quiser que seus resultados venham em uma determinada ordem.
O banco de dados pode pôr os dados inseridos em qualquer posição - não há nada no SQL que force o banco a inserir as coisas em uma determinada posição.
Se você não puser “ORDER BY” poderia ser até que, dependendo da implementação do seu banco de dados, ele lhe devolvesse os dados em sequência completamente diferente a cada vez que você inserisse ou removesse alguma coisa.
Pessoal, desculpem ai, o banco é MySQL, e uso auto incremento no cod.
vou tentar usar o que me endicaram ORDER BY. Pergunta! Eu usaria quando deleto ou quando gravo? E no caso, eu ordenaria pelo o quê? Seria algo como ORDER BY cod. Desde ja agradeço a colaboração de todos.
Eu resolve o meu problema, bastou eu “pensar fora da caixa”.
Como eu havia dito, se eu deletasse por ex. o registro 3, depois que gravasse outro, este se posicionava onde estava o registro 3, quando deleto o ultimo, a proxima inserção fica certa, pois irá ocupar exatamente o lugar do deletado, ou seja, a ultima posição. Como foi dito acima basta ordenar, todavia pelo o que eu havia programado não resolveria o meu problema, ai percebe que para o meu aplicativo eu deveria usar a clausura MAX no SELECT que implementei , agora não me importa aonde vai ficar os registros, pois meus valores estão seguindo como eu queria, depois eu ordeno o banco para visualização (listagem).
MUITO OBRIGADO pela atenção de todos.