Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas.es

Insiro um novo contato, mas o ID fica errado por causa do autoincremen

Recommended Posts

Pessoal eu tenho uma tabela contato que ela tem um ID que é autoincrement...

se na tabela tem 10 contatos e eu apago 2 ele fica com 8 ok...

mas ao adicionar um novo contato ele nao adiciona o novo com id = 9 e sim com id = 12....

eu queria saber como eu faço um update tipo assim:


update contato set id = id -1 where id = (select max(id) from contato);

 

tipo eu queria pegar o maior id existente no banco, e depois que eu adicionar um novo contato eu diminuir um desse valor...

eu queria conseguir fazer esse update para depois fazer uma trigger para corrigir esse problema...

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual seria a necessidade disso ?! :huh:

Corrigir a numeração do ID...

se tem 10 pessoa e eu apagar 5 quando eu insiro uma nova pessoa ao banco de dados ele inseri com id 11 em vez de 6...

eu queria corrigir esse erro no id...

eu queria saber como eu faço o update corretamente....

pegando o maior numero de id no banco e colocando a nova inserção como id + 1 ...

 

queria fazer uma trigger que faça essa correção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é necessário isso, o autoincrement utiliza desse mecanismo para que não aja problemas, e você não terá problema algum ao manipular esses dados.... Procure por SQL Admin... ele faz essa reorganização sem precisar de esforço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alaerte Gabriel,
eu não estou conseguindo usar o SQL Admin da forma que o meu programa dê certo...

eu quero criar uma trigger para corrigir esse problema do ID, só que não estou conseguindo...

seria algo parecido com isso:

create trigger Tgr_updateId after insert on contato
for each row
begin
declare valor int;
select max(id) + 1 from contato into valor;
update contato set id = valor;
end
ou seja eu queria declarar uma variavel dentro da trigger que recebesse o resultado do max(id) +1.
para realizar o update do id com esse novo valor.
com isso evitaria de quando eu deletar 2 usuarios de 10 no total, nao insira um novo id como 11, em vez de 9...

tentei fazer assim também:

create trigger Tgr_updateId after insert on contato
for each row
begin
declare maxId int;
set maxId = (select max(id) from contato);
update contato set id = maxId +1;
end

mas ta dando erro:

 

ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers
with the same action time and event for one table'

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você não é um erro na verdade.

 

Pois na manipulação dos dados e com os relacionamentos das tabelas se os registros compartilharem o mesmo ID mesmo em espaços temporais diferentes, isso irá causar inconsistência no seu banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.