[RESOLVIDO]Quando gravo apos um delete, o novo registro não segue a posição
11 respostas
D
da_galaxia
Fala Jedis;
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
Isso não ocorre. Não no mysql.
Você está fazendo alguma coisa errada.
gabrielfrios
Cria uma sequence no banco.
drsmachado
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.
JuniorMaia
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…
drsmachado
E quem disse que o banco de dados é postgres?
Aliás, o autor nem disse qual o banco, mas, pelo “com auto incremento”, deduz-se que seja MySQL.
JuniorMaia
E quem disse que o banco de dados é postgres?
Aliás, o autor nem disse qual o banco, mas, pelo “com auto incremento”, deduz-se que seja MySQL.
Se ele estiver usando serial no postgres, se torna “auto incremento” ;}
maior_abandonado
da_galaxia:
Fala Jedis;
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
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.
gabrielfrios
Pois é, o cara nem falou que banco ta usando.
E
entanglement
da_galaxia:
Fala Jedis;
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
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.
D
da_galaxia
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.
D
da_galaxia
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.